การพิสูจน์ตัวเองในอนาคตเมื่อเรียนรู้การเขียนโปรแกรม [ปิด]


10

ฉันต้องการเรียนรู้ที่จะเขียนโปรแกรมในลักษณะ 'พิสูจน์อนาคต' หากคุณต้องการ ในขณะที่ Windows เป็นผู้ครอบครองตลาดระบบปฏิบัติการเดสก์ท็อป (ตอนนี้) เห็นได้ชัดว่ามีค่ามากในการเรียนรู้ภาษา / กรอบ / API และอื่น ๆ - นี่อาจเปลี่ยนแปลงได้เมื่ออุปกรณ์ใหม่โผล่ออกมาหรือ Windows ยิงตัวเองออกมา ภาพตัวอย่างที่เป็นมิตรกับ Windows 8 นั้นดูไม่น่าดึงดูดนัก ...

ฉันจะถูกคิดว่ามีความรู้ที่แข็งแกร่งของ C / C ++ สำหรับตรรกะ back-end / การเขียนโปรแกรมระดับต่ำและชอบรวมกับภาษาพกพามากเช่น Java สำหรับ GUI และอื่น ๆ จะเป็นพื้นฐานที่ดีสำหรับการพัฒนาซอฟต์แวร์ ที่จะพิสูจน์ว่ามีประโยชน์ในระบบจำนวนมากที่สุด? - ฉันกำลังพูดถึงพีซีตั้งโต๊ะแท็บเล็ตโทรศัพท์


11
ไม่มีสิ่งเช่นนี้
งาน

สร้างห้องแล้วเติมด้วยหนังสือ
Edward Strange

4
สร้างรังแล้วเติมด้วยอาหารกระป๋อง โปรแกรมเมอร์ที่พิสูจน์อนาคตได้มากที่สุดคือโปรแกรมเมอร์ที่ยังมีชีวิตอยู่หลังจากการเปิดเผย
Tom Anderson

1
อย่าเรียนรู้ภาษาการเขียนโปรแกรมหรือการเขียนโปรแกรม แต่ส่วนใหญ่เรียนรู้การเขียนโปรแกรมและใช้เวลาหลายปีเกือบสิบปีและคุณควรเรียนรู้ตลอดชีวิตของคุณ
Basile Starynkevitch

คำตอบ:


31

หากคุณต้องการที่จะเป็นหลักฐานในอนาคตคำแนะนำที่ดีที่สุดที่ฉันสามารถให้คุณได้นั้นไม่ได้รวมอยู่ในเทคโนโลยี

ดังนั้นอย่าเรียนรู้ API แบบสุ่มสี่สุ่มห้า เรียนรู้วิธีการคิด ปรัชญาเบื้องหลังคืออะไร? ข้อดีและข้อบกพร่องของพวกเขาคืออะไร คิดว่าซอฟต์แวร์โดยทั่วไปไม่ใช่เทคโนโลยีเฉพาะ

นอกจากนี้คุณยังสามารถทำงานบนความคิดของโปรแกรมที่ดีไปที่ OOP และ AOP เป็นตัวเลือกที่ดี IMO แต่อย่าเพิ่งเข้าใจกลไกนี้ทำงานปรัชญาอย่างแท้จริง

อย่าเพิกเฉยต่อวิทยาศาสตร์คอมพิวเตอร์ทั่วไปเช่นโครงสร้างข้อมูลและอัลกอริธึมเพราะพวกเขาเป็นความรู้เทคโนโลยีข้ามซึ่งเป็นประโยชน์เสมอ

ยังไปเพื่อการปฏิบัติที่ดี คุณมักจะมีหลายวิธีที่จะทำบางสิ่งบางอย่าง แต่ส่วนใหญ่เป็นอึ: ข้อผิดพลาดได้ง่ายรักษายากยากที่จะเข้าใจในภายหลังหรือโดยโปรแกรมเมอร์อื่น ฯลฯ . . โดยปกติแล้วโค้ดจะอ่านยากกว่าการเขียน ดังนั้นเรียนรู้วิธีการใช้ความพยายามมากขึ้นในการเขียนเพื่อให้การอ่านง่ายขึ้น (เพราะคุณจะอ่านโค้ดมากกว่าที่คุณเขียน)

เรียนรู้เทคนิคที่มีประสิทธิภาพในการดีบัก (การใช้บันทึกและการดีบักอย่างชาญฉลาด) และการทดสอบ (วิธีการเขียนโค้ดที่สามารถทดสอบหน่วยได้อย่างง่ายดายและวิธีการทดสอบอัตโนมัติเหล่านี้)

จากนั้นคุณจะต้องมีพื้นฐานด้านเทคโนโลยีทั่วไป ฉันกำลังพูดถึงความรู้ในวงกว้างเช่นการทำงานของโปรเซสเซอร์ (การคาดคะเนแคชหรือการคาดคะเนสาขาเป็นการเริ่มต้นที่ดี) เกี่ยวกับระบบ UNIX เกี่ยวกับโปรโตคอลเครือข่ายเช่น IP, TCP และ Ethernet เป็นต้น . .

ในที่สุดเรียนรู้วิธีการเรียนรู้ หากคุณรู้วิธีเรียนรู้คุณสามารถปรับตัวได้

คุณจะต้องมีความรู้เกี่ยวกับเทคโนโลยีเฉพาะเพื่อให้สามารถหางานได้ แต่สิ่งเหล่านั้นล้าสมัยอย่างรวดเร็ว (คิดเกี่ยวกับภาษาโคบอลหรือการเขียนโปรแกรมเว็บในช่วงสงคราม IE / Netscape) ดังนั้นอย่าพึ่งพาพวกเขาเป็นหลักฐานในอนาคต พวกเขาจะเป็นกุญแจสำคัญในการได้รับการว่าจ้าง แต่ไม่ใช่สิ่งที่ทำให้โปรแกรมเมอร์ที่ยอดเยี่ยมและสิ่งที่จะทำให้ทักษะของคุณคงทนตลอดเวลา

แก้ไข: หากคุณเพิ่งเริ่มต้นคุณควรทำสิ่งที่แน่นอน อะไรก็ได้จริง ๆ เกมอย่าง Tetris หรืองูเป็นการเริ่มต้นที่ดีและสนุก หากคุณไม่ได้ทำสิ่งต่างๆคุณจะใช้เวลาในการเรียนรู้มากและไม่ได้รับประสบการณ์ที่จำเป็นในการทำความเข้าใจสิ่งที่คุณเรียนรู้อย่างเต็มที่

ลองตั้งตัวอย่างด้วยรูปแบบการออกแบบ รูปแบบการออกแบบนั้นยอดเยี่ยมและคุณควรใช้มันอย่างเด็ดขาด แต่ถ้าใช้มากเกินไปมันจะทำให้โค้ดของคุณซับซ้อนและเข้าใจยาก คุณจะต้องเผชิญกับปัญหาที่รูปแบบการออกแบบแก้ไขและเสียเวลาในการพยายามแก้ไขหรือผลข้างเคียงเพื่อทำความเข้าใจว่ารูปแบบการออกแบบนั้นเกี่ยวกับอะไร รูปแบบการออกแบบจะต้องใช้เป็น refactorings ขนาดเล็กเมื่อเวลาผ่านไปเมื่อรหัสเติบโตขึ้น และคุณจะรู้ว่าเมื่อใดที่จำเป็นต้องใช้รูปแบบการออกแบบเมื่อประโยชน์ของมันใหญ่กว่าความซับซ้อนของรหัสที่เกิดจากการใช้งาน สิ่งนี้ต้องใช้ประสบการณ์

พวกเขาเรียนรู้จากความผิดพลาดของคุณ ฉันไม่สามารถยืนยันได้มากขึ้น: รับสิ่งที่ทำ !


ดี ... คำตอบที่ยอดเยี่ยม * และบางสิ่งที่ฉันเข้าใจ - ฉันเข้าใจถึงความจำเป็นที่จะต้องเข้าใจหัวข้อของ 'การเขียนโปรแกรม' โดยรวมไม่ใช่หัวข้อที่คุณกล่าวถึงแต่ละหัวข้อ ฉันไม่กังวลเกี่ยวกับการหางานในสาขาเพราะฉันมีรายได้ดีมากในการจัดการเว็บไซต์อีคอมเมิร์ซที่ฉันมีความสุขอย่างแน่นอน ความสนใจในการเขียนโปรแกรมของฉันฉันจัดว่าเป็นงานอดิเรกที่จริงจังแม้ว่าฉันจะใช้มันเพื่อปรับปรุงทั้งของฉันและขั้นตอนการทำงานของคนอื่น
ไม่เปิดเผยตัว

เพิ่มการแก้ไขเพื่อทำให้สิ่งต่าง ๆ ชัดเจนขึ้นในมุมมองของผู้เริ่มต้น
deadalnix

4

สิ่งที่แยกโปรแกรมเมอร์ที่ดีออกจากคนเลวคือความสามารถในการเขียนโปรแกรมในภาษาใดก็ได้ ดังที่ผู้โพสต์คนอื่น ๆ สังเกตเห็นการรู้ภาษาเชิงวัตถุที่สำคัญจะให้เครื่องมือในการสร้างโปรแกรมที่ยอดเยี่ยมและเป็นที่ต้องการ

นอกจากนี้หากคุณยังอยู่ในโรงเรียนให้แน่ใจว่าคุณได้เรียนการเขียน วิศวกรและโปรแกรมเมอร์ที่ดีที่สุดก็เป็นคนที่สื่อสารความคิดได้ดี

เมื่อคุณเริ่มทำงานสิ่งที่ดีที่สุดที่ต้องทำเพื่อป้องกันไม่ให้ล้าสมัยคือการติดตามแนวโน้มปัจจุบัน อย่ากลัวที่จะออกจากงานให้กับอีกคนหนึ่งหากพวกเขาไม่ได้ใช้เทคโนโลยีในปัจจุบันหรือมีกระบวนการที่เลวร้าย ฯลฯ สิ่งที่แย่ที่สุดที่คุณสามารถทำได้สำหรับอาชีพของคุณคือการทำงานที่คุณทำงานกับเทคโนโลยีเก่าหรือกระบวนการที่อ่อนแอ


ฉันขอขอบคุณความรู้เสียงของแนวคิดการเขียนโปรแกรมเป็นสิ่งสำคัญที่จะดีในเกมนี้ แต่การมีความรู้เกี่ยวกับไวยากรณ์ภาษาจริง / ไลบรารีมาตรฐานและสิ่งที่ยังไม่ได้พิสูจน์ว่าจำเป็นต่อการใช้คุณสมบัติของภาษาทั้งหมด (ตามความเหมาะสม) น่าเสียดายที่ฉันไม่ได้อยู่ที่โรงเรียนฉันทำงาน - แม้ว่าฉันคิดว่าฉันพูดในความคิดเห็นก่อนหน้าฉันจ่ายเงินค่อนข้างดีดังนั้นฉันจึงไม่กังวลเกี่ยวกับแง่มุมนั้น ขอบคุณสำหรับคำตอบ. =)
ไม่ระบุชื่อ

4

คำตอบจาก @deadalnix นั้นดี ฉันจะเพิ่มสามสิ่ง:

  1. ข้อมูลที่นำมาใช้ซ้ำได้มาจากกลางไม่ใช่สุดขั้ว มินสกีนำเสนอรายละเอียดนี้ในหนังสือของเขา Society of Mind ดังนั้นฉันจะสรุปเป็น: เลเยอร์ชั้นบนนั้นอยู่ใกล้กับโซลูชันที่เฉพาะเจาะจงมากเกินไปที่จะนำไปใช้กับปัญหาต่อไปในขณะที่เลเยอร์ด้านล่างอยู่ใกล้กับ แพลตฟอร์มเฉพาะสำหรับส่วนมากจะใช้กับปัญหาต่อไป เลเยอร์กลางคือที่พบข้อมูลที่นำกลับมาใช้ใหม่ได้ - อัลกอริทึม, รูปแบบ, อนุกรมวิธาน, กลยุทธ์, กลยุทธ์, เทคนิค, องค์กร, โปรโตคอล, และอัลที่มักจะมีประโยชน์ในการแก้ปัญหาที่คล้ายกันโดยไม่คำนึงถึงโดเมน (ชั้นบนสุด) หรือแพลตฟอร์ม ) หมายเหตุ: เลเยอร์เหล่านี้ไม่มีส่วนเกี่ยวข้องกับสถาปัตยกรรม 3 ชั้นเรากำลังพูดถึงซีแมนทิกส์ปัญหา / แก้ปัญหาพื้นที่
  2. คุณจะไม่ทราบว่าเป็นเรื่องธรรมดา / ทั่วไป / นำมาใช้ซ้ำได้จนกว่าคุณจะเห็นอินสแตนซ์อย่างน้อยสองอินสแตนซ์ ดังนั้นศึกษาว่า Windows ทำงานอย่างไรภายในจากนั้นศึกษาว่า linux / unix ทำงานอย่างไรภายในและเปรียบเทียบทั้งสองได้ สิ่งทั่วไปนั้นสามารถนำมาใช้ซ้ำได้ สิ่งที่แตกต่างกันคือการตัดสินใจออกแบบซึ่งอาจส่งผลให้เกิดความเข้าใจอย่างถี่ถ้วน
  3. สำหรับสถานการณ์หรือปัญหาใด ๆ ให้คิดว่าคุณจะใช้โซลูชันอย่างไรจากนั้นเปรียบเทียบโซลูชันเก้าอี้เท้าแขนของคุณกับโซลูชันจริงและพยายามเข้าใจเหตุผลที่เป็นไปได้ที่อยู่เบื้องหลังความแตกต่าง

เพิ่มเติมที่ยอดเยี่ยม!
deadalnix

2

เมื่อคุณเริ่มต้นฉันพูดได้แค่เรียนภาษามันไม่สำคัญว่าจะต้องเรียนภาษาอะไร ความยากลำบากไม่ได้อยู่ในภาษา (ไวยากรณ์) ตัวมันเอง แต่ในการทำความเข้าใจแนวคิด; และแนวคิดการเขียนโปรแกรมทั่วไปเหล่านี้ใช้กับภาษาการเขียนโปรแกรมทั้งหมดดังนั้นการเรียนรู้ภาษาที่สองและสามและสี่ (... ) ของคุณจะง่ายขึ้นมาก

ดังนั้นในตอนแรกอย่าคิดมากเกินไปเกี่ยวกับการเป็น 'การพิสูจน์ในอนาคต' อย่างไรก็ตามในขณะที่คุณก้าวหน้าพยายามที่จะมีความเชี่ยวชาญในภาษาที่แตกต่างจากคนอื่นมาก โดยทั่วไป (อย่างที่คุณพูด) คุณควรใช้ภาษาระดับต่ำ (--ish) เช่น C / C ++ ภาษาการเขียนโปรแกรมระดับสูงเช่น Java และภาษาสคริปต์ (Python, Ruby, etc) ถ้าคุณต้องการเข้าไปในสิ่งที่ก้าวหน้าจริงๆคุณต้องรู้จักแอสเซมบลีด้วย

แต่อย่าเครียดตัวเองมากเกินไปเกี่ยวกับเรื่องนี้ในตอนนี้ การเรียนรู้ที่จะเขียนโปรแกรมต้องใช้เวลาหลายปี ในขณะนี้เพียงเลือกภาษาเช่น Java หรือ C # หรืออะไรก็ได้แล้วไปต่อ :)


ฉันชอบ 'เลือกหนึ่ง' และไปที่มันทัศนคติ ... ฉันอาจจะนำมาใช้ หากคุณเลือกภาษาระดับต่ำ (C) ภาษาระดับสูง (Java) และภาษาสคริปต์ (Python) ภาษาเดียวและเรียนรู้ทั้ง 3 ภาษาพร้อมกันไหม
ไม่เปิดเผยตัว

คุณเพิ่งเริ่มเขียนโปรแกรมใช่ไหม จากนั้นอย่าเรียนรู้ภาษามากกว่าหนึ่งครั้งมันจะทำให้คุณสับสน สิ่งที่คุณต้องเรียนรู้ตั้งแต่แรกคือแนวคิดไม่ใช่ภาษา คุณควรย้ายไปใช้ภาษาใหม่เมื่อจำเป็นเท่านั้น ตัวอย่างเช่นเมื่อเร็ว ๆ นี้ฉันรู้สึกว่าจำเป็นต้องใช้ภาษาสคริปต์เท่านั้นและนั่นเป็นเพราะฉันตัดสินใจที่จะทำให้เกมของฉันใช้สคริปต์ Python ได้
พอล

ฉันจะไม่บอกว่าเพิ่งเริ่มต้น - ฉันรู้จัก html / css มาหลายปีแล้ว (แม้ว่าพวกเขาจะไม่ผ่านการคัดเลือก / ไม่เกี่ยวข้อง) และได้สร้างเว็บไซต์ PHP / MySQL มาหลายเดือนแล้ว การพัฒนาเว็บที่ฉันสามารถ 'รับ' ด้วยมันเป็นการพัฒนาซอฟต์แวร์ที่ฉันจัดการ ฉันจะฟังสิ่งที่คุณพูด
ไม่ระบุชื่อ

If you want to go into the really advanced stuff you must also know Assembly- คุณสามารถทำได้ในทุกระดับความท้าทายต่างกัน
sixtyfootersdude

1

ฉันจะถูกคิดว่ามีความรู้ที่แข็งแกร่งของ C / C ++ สำหรับตรรกะ back-end / การเขียนโปรแกรมระดับต่ำและชอบรวมกับภาษาพกพามากเช่น Java สำหรับ GUI และอื่น ๆ จะเป็นพื้นฐานที่ดีสำหรับการพัฒนาซอฟต์แวร์ ที่จะพิสูจน์ว่ามีประโยชน์ในระบบจำนวนมากที่สุด?

ฉันกำลังพูดถึงพีซีตั้งโต๊ะแท็บเล็ตโทรศัพท์

ไม่ไม่มีสิ่งใดที่จะช่วยได้

ความรู้ที่แข็งแกร่งของโครงสร้างข้อมูลและอัลกอริธึม - ซึ่งเป็นอิสระจากภาษาการเขียนโปรแกรมเฉพาะใด ๆ - มีค่ามากกว่า "การเขียนโปรแกรมระดับต่ำและไม่ชอบ"

"ภาษาแบบพกพาที่ยิ่งใหญ่อย่าง Java" เป็นแบบพกพาเป็น C และไม่ช่วย สิ่งสำคัญต่อไปจะแตกต่างจากภาษาเหล่านี้ที่คุณซุปเปอร์พกพา Java จะมีความรับผิดไม่สินทรัพย์

Mac OS (เดสก์ท็อปแท็บเล็ตและโทรศัพท์) เสร็จสิ้นใน Objective C ซึ่งอาจเป็นจุดเริ่มต้น

Windows (เดสก์ท็อปโต๊ะและโทรศัพท์) เสร็จสิ้นใน C # นั่นอาจเป็นจุดเริ่มต้น


ฉันเปรียบเทียบ Java กับ C ทั้งสองเป็นภาษาพกพา - กับ Java อยู่ในระดับต่ำและระดับสูงตามลำดับซึ่งเป็นจริง ... ตามที่คุณเพิ่งพูดตัวเอง Mac OS = Obj-C, Windows = C # ซึ่งเป็น ที่ฉันไม่ต้องการที่จะมีความเชี่ยวชาญในอย่างใดอย่างหนึ่งและตัดตัวเลือกของฉันหรือทั้งสองอย่างและเป็น 'ต้นแบบของไม่มี' ถ้าคุณจับดริฟท์ของฉัน ฉันซาบซึ้งในสิ่งที่คุณพูด แต่ความรู้ที่แข็งแกร่งเกี่ยวกับโครงสร้างข้อมูลและอัลกอริธึมที่ไม่มีความรู้ภาษาการเขียนโปรแกรมนั้นไร้ประโยชน์เหมือนกับความรู้ภาษาการเขียนโปรแกรม
ไม่เปิดเผยตัว

@Chris Bridgett: คุณเข้าใจผิดอย่างสิ้นเชิงประเด็น มีปัจจัยพื้นฐานสากลและภาษาการเขียนโปรแกรมไม่เป็น ขั้นแรกให้เรียนรู้พื้นฐาน จากนั้นภาษา (หรือระบบปฏิบัติการ) ก็เป็นเพียงการแต่งหน้าบนเค้ก ความรู้พื้นฐานเป็นเค้กและเป็นหลักฐานในอนาคต
S.Lott
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.