ฉันยังไม่รู้วิธีการโปรแกรม


122

ฉันอ่านหนังสือจำนวนมากสำหรับภาษาการเขียนโปรแกรมต่างๆ Java, Python, C และอื่น ๆ ฉันเข้าใจและรู้พื้นฐานทั้งหมดของภาษาและฉันเข้าใจอัลกอริทึมและโครงสร้างข้อมูล (เทียบเท่าพูดชั้นเรียนวิทยาศาสตร์คอมพิวเตอร์สองปี)

แต่ฉันยังไม่สามารถคิดวิธีการเขียนโปรแกรมที่มีประโยชน์

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

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

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

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

ฉันจะถูกทางที่ถูกต้องได้อย่างไร?


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

3
สิ่งใดที่คุณคิดว่าเป็น "มีประโยชน์"

7
@Michael - ฉันคนหนึ่งโหวตว่า Off-Topic ย้ายไปที่ P.SE. ฉันคิดว่ามันจะเป็นสถานที่ที่เหมาะสมกว่าสำหรับการอภิปรายเกี่ยวกับการเขียนโปรแกรมเป็นอาชีพและงานฝีมือ

12
@duffymo: และบางคนไม่ได้หมายถึงการแสดงความคิดเห็นในคำถาม
davidk01

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

คำตอบ:


93

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

คุณอาจพบว่าหน้านี้น่าสนใจ "สอนการเขียนโปรแกรมด้วยตัวคุณเองในสิบปี" http://norvig.com/21-days.html

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


13
+1 สำหรับสิ่งที่บิลพูดและพูดคุยเรื่อง "บล็อกของนักเขียน"
David Weiser

gawd ฉันได้ทำสิ่งนี้มาสองสามปี (10 + -2) และฉันยังคงเขียนโค้ดเป็นบางครั้งและจบลงด้วยการลบมัน ฉันมี "refactors" สองสามตัวที่ฉันทำงานมาสองสามวันแล้วและเลิก (ผ่านการควบคุมแหล่งที่มา) เพราะฉันเป็นคนปัญญาอ่อน
Ken Henderson

5
+1 เพื่อเปรียบเทียบกับการเขียนเรื่องราว โปรแกรมของฉันยังอยู่ในช่วง "กาลครั้งหนึ่งนานมาแล้ว ... "
Andy

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

1
บล็อกของนักเขียน คุณจับมันที่นั่น!
abel

70

ฉันมักจะถูกครอบงำด้วยโครงการขนาดใหญ่เช่นเดียวกับที่คุณพบใน SourceForge หรือ GitHub ฉันสงสัยว่าใครหรือแม้แต่ทีมจะเข้าใจว่าเกิดอะไรขึ้นกับไฟล์ 10 หรือ 100 โดยมีโค้ดหลายพันบรรทัด

ไม่มีใครทำ อย่างน้อยเริ่มแรก

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

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

ตัวอย่าง:

ในกรณีของโครงการกึ่งใหญ่มักจะเริ่มต้นเล็ก ๆ "ฉันต้องการสร้างแคชเซิร์ฟเวอร์" ดังนั้นคุณใช้เวลาสองสามวันในการแฮ็คและไปถึงสิ่งที่ใช้ได้ แต่สามารถปรับปรุงได้อย่างมาก ดังนั้นคุณจึงเพิ่มแนวคิดของเธรด

จากนั้นคุณพบปัญหาการทำงานพร้อมกันเนื่องจากเธรดนั้น ดังนั้นคุณแก้ไขได้โดยเปลี่ยนเป็นโครงสร้างข้อมูลที่เกิดขึ้นพร้อมกัน

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

ทุกอย่างดูเหมือนว่าจะทำงานได้ดียกเว้นผู้ใช้เริ่มบ่นว่าการดำเนินการไม่ได้เป็นอะตอมและข้อมูลเสียหาย

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

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

ตั๋วสองใบเปิด มีข้อผิดพลาดในการประมวลผลรายการและมีบางกรณีที่หายากที่หยุดชะงัก

เพื่อนของคุณทำงานกับข้อผิดพลาดในการประมวลผลรายการในขณะที่คุณจัดการกับการหยุดชะงัก คุณตระหนักดีว่าจำเป็นต้องมีการเขียนซ้ำอีกครั้งเพื่อปฏิบัติการปรมาณู

... และมันก็เป็นเช่นนั้น

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

คำแนะนำของฉัน:

อย่าจม หากคุณมีความคิดให้ใช้ฟังก์ชั่นต่าง ๆ ถ้ามันคุ้มค่าที่จะทำหลังจากนั้นให้เพิ่มทีละนิด ให้โครงการของคุณเติบโตอย่างเป็นธรรมชาติ


ใช่มันเกือบจะเหมือนว่ามันมาจากประสบการณ์ส่วนตัว ...
NickAldwin

@ ไม่ได้เราทุกคนไม่เคยมีประสบการณ์คล้ายกับโครงการ "X" พร้อมคุณสมบัติ "Y" และ "Z" หรือไม่ ฉันมีโครงการที่คล้ายกันสองโครงการในปีที่แล้ว ไม่มีของพวกเขาทั้ง Redis = P
Josh Smeaton

สิ่งนี้อธิบายเกือบทุกโปรแกรมที่ฉันเขียน
Tim Post

ดังนั้นมันจะไป Kurt Vonnegut พบโปรแกรมคอมพิวเตอร์
Zoot

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

28

แม้แต่รายการที่ยิ่งใหญ่ที่สุดก็เริ่มต้นด้วยแนวคิดและเขียนทีละบรรทัด

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

อย่างไรก็ตามมีบางสิ่งที่คุณควรระวังตั้งแต่เริ่มต้น:

  • แทบทุกแอปพลิเคชันขนาดใหญ่เขียนขึ้นอย่างสมบูรณ์ตั้งแต่เริ่มต้น คุณสามารถทำสิ่งต่าง ๆ ได้มากขึ้นในเวลาที่สั้นลงถ้าคุณใช้ไลบรารีและเฟรมเวิร์กคุณภาพสูงที่มีอยู่แล้ว การเริ่มต้นกับสิ่งเหล่านี้มักจะทำให้คุณหงุดหงิดและทำงานมากกว่าทำด้วยตัวเอง แต่ก็แทบจะไม่เป็นความจริงเลย
  • การพิจารณาอย่างรอบคอบเกี่ยวกับวิธีการจัดโครงสร้างโปรแกรมของคุณ (วิธีการออกแบบ) เป็นสิ่งสำคัญมากเมื่อโปรแกรมของคุณมีขนาดใหญ่ขึ้น ใช้เวลาสักพักและอ่านหนังสือเกี่ยวกับการออกแบบ (โดยเฉพาะฉันแนะนำ "Clean Code") และวิศวกรรมซอฟต์แวร์รวมถึงพื้นฐานทางเทคนิค

6
"วิธีที่ดีที่สุด (บางทีอาจเป็นเพียงอย่างเดียว) ในการเรียนรู้วิธีการเขียนโปรแกรมในโลกแห่งความเป็นจริงคือการเริ่มทำมัน" มากหรือน้อยในสิ่งที่ฉันจะพูด คุณสามารถอ่านและ "เข้าใจพื้นฐาน" ได้มาก ... ยางต้องตีถนนที่ไหนซักแห่ง
WernerCD

1
+1 สำหรับบรรทัด "เริ่มทำเลย" คุณไม่สามารถเรียนรู้ประสบการณ์จากหนังสือ
riwalk

+1 สำหรับการกล่าวถึงหนังสือ "รหัสสะอาด" คุณควรทำให้โค้ดอ่านได้เสมอ ง่ายต่อการอ่าน == เข้าใจง่าย == แก้ไขได้ง่าย
Igor Popov

15

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

คิดเกี่ยวกับโปรแกรม "ของจริง" ขนาดใหญ่ที่คุณต้องการเขียน ตอนนี้คิดเกี่ยวกับชิ้นส่วนต่าง ๆ ที่คุณต้องสร้างเพื่อให้มันทำงานในแบบที่คุณต้องการ ตัวอย่างเช่นในเกมคนแรกที่ทันสมัยคุณจะต้องมีเอ็นจิ้นกราฟิก 3D, AI ที่ไม่ใช่ผู้เล่นที่เป็นตัวละคร, โมดูลเพลง / เสียง, เอ็นจิ้นฟิสิกส์และโมดูลระดับบนสุดที่บังคับใช้กฎของเกม (รู้ "แผนที่" วิธีการที่ตัวละครต่าง ๆ โต้ตอบ ฯลฯ ) จากนั้นก็มีงานศิลปะและการออกแบบตัวละครและดนตรีซึ่งไม่มีรหัส แต่เป็นสิ่งที่จำเป็นสำหรับเกมที่จะเสร็จสมบูรณ์

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

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

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

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

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

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

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

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


ฉันไม่เห็นด้วยว่าโดยปกติแล้วโปรแกรมฝังตัวจะมีขนาดเล็กกว่าแอปเดสก์ท็อป มันอาจจะเป็นเช่นนั้นในอดีต แต่ฉันได้ทำงานกับผลิตภัณฑ์ฝังตัวสองสามตัวที่ใช้เวลาพัฒนามากกว่า 100 ปีและสิ่งเหล่านี้ก็ไม่ถือว่าใหญ่มากนัก
Bart van Ingen Schenau

1
ฉันเดาว่ามันจะขึ้นอยู่กับสิ่งที่คุณหมายถึงโดย "ฝังตัว" หากคุณหมายถึงบางสิ่งบางอย่างเช่นสมาร์ทโฟนหรือระบบยานยนต์ครบวงจรฉันสามารถเชื่อใน 100 ปีของคุณ อย่างไรก็ตามยังมีระบบขนาดเล็กจำนวนมากที่สามารถใช้งานในพื้นที่นั้นได้
kindall

+1 สำหรับเริ่มต้นด้วยความคิดเกี่ยวกับสิ่งที่มีขนาดเล็กลงและจากนั้นจะย้ายไปคิดในสิ่งเดียวกันและเกี่ยวกับสิ่งที่มีขนาดใหญ่
gablin

1
อันตรายในการแข่งขันกับ GMail คืออะไร? หากสิ่งที่คุณเขียนด้วยมือเดียวจริง ๆ แล้วสามารถแข่งขันกับสิ่งที่ Google เปิดตัวคุณสามารถพิจารณาตัวคุณเองว่าเป็นโปรแกรมเมอร์ที่ดี
gablin

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

9

คุณจะไม่เข้าใจวิธีการโปรแกรมนอกจากว่าคุณจะต้องเผชิญกับงานจริง ไม่มีทฤษฎีใดที่จะมาแทนที่งานง่ายๆในโลกแห่งความเป็นจริง ก่อนที่จะเริ่มทำงานกับสถานการณ์ rw ฉันกำลังอ่านหนังสือจำนวนมากอย่างไร้เดียงสากับตัวอย่างทั้งหมด แต่เมื่อฉันประสบปัญหาจริงฉันก็ไม่สามารถรวบรวมความรู้เชิงทฤษฎีทั้งหมดของฉันเพื่อทำงานให้เสร็จ หากคุณเป็นผู้เริ่มต้นฉันขอแนะนำให้คุณรับงานจากทุกที่ที่ทำได้ อย่าคิดว่ามันไร้ประโยชน์เว้นแต่คุณจะแก้ไขมัน ในขั้นตอนแรกลองแก้ปัญหาโครงสร้างข้อมูลเช่นการเรียงลำดับรายการที่เชื่อมโยงการดำเนินการ DFS BFS บนต้นไม้กราฟ ฯลฯ ไม่เพียง แต่จะปรับปรุงทักษะการเขียนโค้ดของคุณ แต่สิ่งที่สำคัญกว่านั้นจะช่วยพัฒนาทักษะการวิเคราะห์และอัลโก ซึ่งเชื่อฉันเป็นความรู้ที่มีค่า จากนั้นเมื่อคุณจะรู้ว่าคุณสามารถโยกพอยน์เตอร์ด้วยการชี้ซ้ำ

บรรทัดล่าง มันคือทั้งหมดที่เกี่ยวกับการปฏิบัติ เพียงแค่ขุดและรหัสรหัสรหัส


7

เริ่มด้วยเกมคอมพิวเตอร์เหมือนที่คนอื่นทำ เกมที่ดีคือทั้งความท้าทายในการเขียนโปรแกรมและการออกแบบต้องการการคิดอย่างรอบคอบเกี่ยวกับโครงสร้างภายในและใช้ไลบรารีระบบในรูปแบบที่สอนได้มาก เช่นเดียวกับซอฟต์แวร์ "มีประโยชน์" จริง

กฎทั่วไปคือหลังจากเขียนเนื้อหาให้เพียงพอการตรัสรู้บางอย่างจะเกิดขึ้นอย่างหลีกเลี่ยงไม่ได้

จุดที่ดีที่จะเริ่มต้น (ถ้าคุณรู้สึกเช่น C) เป็นhttp://gamedev.net/โดยเฉพาะอย่างยิ่งhttp://nehe.gamedev.net/ นอกจากนี้ยังมีจุดเริ่มต้นที่ดีอื่น ๆ อีกมากมาย: D


4
(โอ้และฉันเพิ่งรู้ว่าทำไมทุกคนเริ่มต้นด้วยเกมสิ่งที่เป็นประกายและสวยเป็นแรงบันดาลใจ)

10
ทุกคน ? อ้างสิทธิ์เป็นตัวหนา

4
ฉันไม่ได้เริ่มเกม ฉันจะพบว่าเกินกว่าที่ซับซ้อน = P
Josh Smeaton

4
คนส่วนใหญ่วันนี้เริ่มต้นด้วย webapp อุปสรรคน้อยกว่ามากในการเข้า (มันเป็นเพียงข้อความ)
ฆ่าชาย

4
ความคิดเห็นแรกของคุณก็อาจจะดีกว่าคำตอบของคุณ - สิ่งที่เป็นประกายเงางามและสวยคือการสร้างแรงจูงใจ นั่นคือสิ่งที่สำคัญ
Scorchio

6

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

สิ่งที่คุณต้องการคือประสบการณ์การแบ่งงานที่ซับซ้อนขนาดใหญ่เป็นงานง่าย ๆ นั่นคือรากของการเขียนโปรแกรมทั้งหมด ส่วนที่เหลือเป็นเพียงความหมาย


6

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

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

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


5

เขียนสคริปต์ 200 บรรทัด จากนั้นเริ่มปรับปรุง

Featuritis จะทำให้คุณได้ไฟล์แหล่งข้อมูล 100 ไฟล์และ KLOC หลายร้อยไฟล์ในเวลาไม่นาน :)


5

"พวกเขาไม่แสดงวิธีการพัฒนาโปรแกรมที่ซับซ้อนซึ่งทำอะไรที่มีประโยชน์จริง ๆ !"

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

เราไม่รู้ว่าคุณล้มเหลวหรือมีอะไรผิดพลาด เราไม่สามารถบอกได้ว่าคุณกำลังติดตามอะไรอยู่

อย่างใดคุณมีความคิดในหัวของคุณที่คุณไม่ได้สื่อสาร

ซอฟต์แวร์ - การเขียนโปรแกรม - คือทั้งหมดที่เกี่ยวกับการขจัดความคิดออกจากหัวของคุณเป็นภาษาบางอย่าง (Python, Java, อังกฤษ, อะไรก็ตาม)

ขั้นตอนสำคัญหนึ่งในการเขียนโปรแกรม (และถามคำถาม) คือการกำหนดคำศัพท์ของคุณ คุณหมายถึงอะไรโดย "ทำอะไรที่มีประโยชน์"? ชัดเจนมากสมบูรณ์และแม่นยำมาก


โหวตแล้วฉันสนใจคำตอบของ OP ในหัวข้อนี้มาก
Scorchio

5

ฉันถูกถามคำถามนี้ตลอดเวลาเช่นวิธีการเริ่มต้น มันง่ายจริงๆ นี่คือขั้นตอน

  1. เกิดความคิดขึ้นมา ฟังดูเหมือนคุณมีอยู่แล้ว
  2. ทำให้ความคิดของคุณง่ายขึ้นเป็นแกนกลาง - สิ่งที่คุณคิดว่าคุณสามารถรับมือได้
  3. จัดวาง UI บนกระดาษหรือผ้าเช็ดปาก
  4. ลองและจัดวาง UI ในสภาพแวดล้อมการพัฒนาของคุณ
  5. หากคุณพบปัญหา, google, google, google, ถามคำถามเกี่ยวกับ stackoverflow ใช้อึที่มีชีวิตจากแหล่งอินเทอร์เน็ตเพื่อรับความช่วยเหลือ ถามเพื่อนและเพื่อนร่วมงานที่เป็นโปรแกรมเมอร์เพื่อช่วยคุณในสถานการณ์ที่เฉพาะเจาะจง กลับไปที่ขั้นตอนที่ 4
  6. เริ่มเขียนตรรกะของแอปพลิเคชันของคุณ หากคุณพบปัญหาให้ไปที่ขั้นตอนก่อนหน้าและลองอีกครั้ง
  7. เร็ว ๆ นี้คุณจะมีสิ่งที่ทำงานเร็ว ๆ นี้

+1 สำหรับเวิร์กโฟลว์ - มันควรจะทำงานอย่างใด ฉันไม่สามารถบอกได้ว่าขั้นตอนที่สองสำคัญแค่ไหน อาจเป็นขั้นตอนที่จะตัดสินว่าคุณสามารถจัดการงานได้หรือไม่
Scorchio

"ฟังดูเหมือนคุณมีอยู่แล้ว" ฉันจะโต้แย้งว่า หากมีความคิดมันจะเป็นส่วนหนึ่งของคำถาม
S.Lott

ที่จริงแล้วคุณควรเริ่มต้นด้วยการเขียนตรรกะสำหรับแอพแล้วเพิ่ม UI ลงไป มันง่ายกว่า
CaffGeek

หากคุณนึกถึงเครื่องมือ / แอพพลิเคชั่นคุณจะใช้สิ่งนั้นได้ดีกว่าเดิม โครงการที่ถูกโยนทิ้งสามารถสร้างแรงจูงใจได้ เริ่มจากสิ่งเล็ก ๆ และสร้างจากที่นั่น ฉันอยากจะแนะนำเครื่องมือบรรทัดคำสั่ง
Carlos Focker

1
@Chad ฉันไม่เห็นด้วยกับคุณ สำหรับ noobs ตรรกะนั้นเป็นนามธรรม แต่ UI นั้นเข้าใจง่าย การย้อนกลับมาพร้อมกับประสบการณ์
AngryHacker

4

สร้างบางสิ่งเล็ก ๆ ไม่เป็นไรโปรแกรมของคุณจะครบ 1,000 คน

ความคิดบางอย่าง:

  • นาฬิกา (ดิจิตอลก่อนจากนั้นจึงดูเป็นอนาล็อก)
  • ผู้สร้าง labirynth อัตโนมัติ
  • displayer โครงสร้างไดเรกทอรี
  • mp3 lister อัลบั้ม
  • เป็นต้น

การเลือกแพลตฟอร์มเครื่องมือเป็นส่วนหนึ่งของงาน


โดยหลักการแล้วฉันเห็นด้วยกับคุณ OP กำลังถามเกี่ยวกับซอฟต์แวร์ที่มีประโยชน์ ลิสต์อัลบั้ม mp3 จะเป็นตัวเลือกที่ดี เครื่องเล่น mp3 ขั้นพื้นฐานจะดีกว่าเพราะเขาจะได้สัมผัสกับความยากลำบากของโครงการที่ต้องเผชิญ รวมถึง LOC
Josh Smeaton

@ Josh, การถอดรหัส mp3 นั้นไม่สำคัญสำหรับการเริ่มต้นโปรแกรมเมอร์

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

@ จอชฉันยังไม่คิดว่าตัวถอดรหัส MP3 นั้นเป็นของตัวเล็กและเหมาะสำหรับจุดประสงค์นี้

3

ตกลงมาเริ่มกันที่ความคิดของคุณสำหรับโปรแกรม X ที่ทำสิ่งที่มีประโยชน์และลองแยกแยะ:

  • ใช้กระดาษทำแผนที่ความคิดหรือซอฟต์แวร์สร้างไดอะแกรมเพื่อจัดวางลอจิคัลการไหล / การไหลของโปรแกรม

  • เนื่องจากคุณเพิ่งเริ่มเลือกหนึ่งในรายการเหล่านั้น (ยิ่งใกล้จุดเริ่มต้น) และทำลายมันให้ดียิ่งขึ้น

  • เขียนรหัสของคุณก่อนและใช้มันเพื่อสร้างต่อ

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

ตามคำพูดที่เกิดขึ้น - Gnome ไม่ได้สร้างในหนึ่งวัน :-)


3

(ตอบไว้ข้างต้นในความคิดเห็นแล้วแนะนำให้ส่งนี่เป็นคำตอบหลังจากคำถามถูกเปิดอีกครั้ง)

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

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

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


3

หนึ่งในสิ่งที่ยากที่สุดที่ต้องทำเมื่อคุณเป็นมือใหม่คือการตั้งเป้าหมายที่เป็นจริงสำหรับสิ่งที่ "ฉันจะปรับปรุง" ได้อย่างไร - การออกกำลังกายควรมีในระดับปัจจุบันของคุณ

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

ฉันขอแนะนำให้คุณดูอย่างใกล้ชิดที่http://projecteuler.net/ซึ่งมีแบบฝึกหัดมากมายและระบบ "ตรวจคำตอบอัตโนมัติ" ซึ่งจะช่วยให้คุณทำงานได้ด้วยตนเอง แบบฝึกหัดมีคำพูดที่ดี แต่อาจทำให้คุณต้องคิด บางคนอาจต้องการให้คุณคิดมาก แต่แม้จะไม่สามารถแก้ปัญหาเหล่านั้นได้คุณก็จะสอนสิ่งที่มีประโยชน์

การใช้ถ้อยคำเต็มปัญหา 1 คือ:

หากเราแสดงจำนวนธรรมชาติทั้งหมดต่ำกว่า 10 ที่เป็นทวีคูณของ 3 หรือ 5 เราจะได้ 3, 5, 6 และ 9 ผลรวมของทวีคูณเหล่านี้คือ 23

ค้นหาผลรวมของทวีคูณทั้งหมดของ 3 หรือ 5 ด้านล่าง 1,000

คุณคิดว่าคุณสามารถแก้ปัญหานี้ได้หรือไม่? จากนั้นทำมัน!


3

คุณต้องการประสบการณ์ในโลกแห่งความเป็นจริง !! . ไม่มีหนังสือเล่มใดสามารถสอนคุณได้!

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

คุณต้องเข้าใจว่าหนังสือมีความเฉพาะเจาะจงมากและบางครั้งสำหรับผู้ที่รู้วิธีพัฒนาซอฟต์แวร์อยู่แล้ว

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

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

หากคุณจัดการหางานกับนักพัฒนาที่มีความสามารถดีกว่ามาก เรียนรู้จากพวกเขาอย่ากลัวที่จะทำผิดพลาด

จนกว่าคุณจะต้องแก้ไขข้อบกพร่องเร่งด่วนครั้งแรกของการผลิตสดคุณจะไม่ทราบว่าบั๊กซอฟต์แวร์คืออะไร!

:)


2

ลองโครงการโอเพ่นซอร์สดูว่าคุณสามารถใส่ได้หรือไม่เริ่มโดยการดาวน์โหลดซอร์สและดูว่าคุณสามารถรับตั๋วได้ไหม


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

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

3
@ jellyfishtree หากคุณไม่สามารถเขียนโปรแกรมที่อาจจะมีความหมายที่มากเกินไป

@Thorbjorn แน่นอน แต่เป็นสิ่งที่ฉันหวังว่าฉันจะได้ทำมากขึ้นเมื่อฉันเริ่มครั้งแรก ฉันคิดว่าคุณเรียนรู้อะไรมากมายจากการออสโมซิสและการดำน้ำที่หัวก่อน อย่างน้อยที่สุดคุณจะได้รับการวัดที่ดีขึ้นของสิ่งที่คุณไม่ทราบ / เข้าใจ - สิ่งที่มีคุณค่ามากขึ้นเมื่อคุณเริ่มและเริ่มอยากรู้ว่าจะกำหนดเป้าหมายของคุณอย่างไรและทำงานอย่างไร
jellyfishtree

@ jellyfish แน่นอนและฉันแน่ใจว่ามันเป็นขั้นตอนที่ดีที่จะใช้ แต่ยังไม่ได้ในกรณีนี้

2

เมื่อฉันต้องการเรียนรู้ภาษาใหม่ฉันมักจะพยายามนำเศษส่วนมาใช้ ด้วยวิธีนี้คุณจะได้รับผลตอบรับทันทีหากใช้งานได้และให้ผลตอบแทนดีมาก และมีหลายวิธีที่คุณสามารถปรับปรุงเศษส่วนได้ การใช้มัฟฟินอย่างไร้เดียงสาช้ากว่านรก

มันไม่มีประโยชน์อะไรมาก แต่คุณได้เรียนรู้มากมายและมันก็ดูดีมาก


ฉันชอบสิ่งนี้ - เป็นวิธีกวีสำหรับการเรียนรู้ภาษาใหม่ แต่ฉันไม่รู้ว่าเราควรแนะนำสิ่งนี้ให้กับผู้เริ่มต้นหรือไม่: D
Scorchio

2

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

หากคุณไม่รู้ว่าจะเริ่มจากตรงไหนบางทีคุณอาจไม่มีปัญหา!

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

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

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


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

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


2

เมื่อฉันเริ่มเขียนโปรแกรมฉันรักเกมคอมพิวเตอร์ ดังนั้นฉันจึงเริ่มเขียนเกมของตัวเองทันทีที่ฉันมีเครื่องมือที่จะทำ

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

นอกจากนี้คุณสามารถเริ่มต้นด้วยบางสิ่งบางอย่างเช่นสล็อตแมชชีน (คุณไม่ต้องการภาพเคลื่อนไหวหรือแม้แต่รูปภาพเพียงใช้ A = apple, L = lemon, S = start, P = Plum ฯลฯ )

สิ่งนี้จะสอนคุณถึงพื้นฐานของการจัดการอินพุตของผู้ใช้บางส่วนรักษาสถานะของเกมและสร้างผลลัพธ์ตามนั้น

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

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

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

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


2

ในวิทยาลัยมีคลาสที่เรียกว่าการฝึกเขียนโปรแกรมที่สอนพื้นฐานการเล่นนี้ ก่อนหน้านี้คุณได้รับ UI สำหรับแอปพลิเคชันการซื้อขั้นพื้นฐานและต้องเขียนรหัสแบ็กเอนด์เดือนที่แล้วคือ Tetris ตั้งแต่เริ่มต้น ฉันคิดว่าประมาณ 50% ของนักเรียนใหม่ (ไม่ได้เรียนใหม่) ล้มเหลวเพราะการไล่ตั้งแต่เล็กไปจนถึงใหญ่นั้นยากอย่างไม่น่าเชื่อ

ฉันขอแนะนำอย่างน้อยหนึ่งอย่างต่อไปนี้:

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

  • เพียงแค่ออกแบบโครงการสุดท้ายของคุณบนกระดาษพร้อมลูกศรเพื่อการอ้างอิง หากคุณสร้างงูคุณอาจมีหัวงูหางงูอาหารพื้นที่ว่างผนังกระดานทิศทางปัจจุบัน ฯลฯ อาจช่วยให้คุณรู้ว่าโครงการของคุณใหญ่กว่าที่คุณคิดหรือไม่

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

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

ในที่สุดสิ่งที่คุณทำคุณควรใช้รูปแบบการออกแบบ MVC ขั้นพื้นฐาน (รุ่นมุมมองตัวควบคุม) ใส่มุมมองของคุณ (UI) ลงในคลาสที่ 1+ ตัวควบคุมของคุณ (อินพุตเอาต์พุต ฯลฯ ) ลงในคลาสที่ 1+ และโมเดลของคุณ (ตรรกะข้อมูลโดยทั่วไปทุกอย่างอื่น) ลงในหลายชั้นเรียน มันเป็นวิธีง่ายๆในการรับองค์กรขั้นพื้นฐาน

จำไว้ว่าขั้นตอนนี้ยาก เป็นเรื่องจริงที่บางคนไม่สามารถเขียนโปรแกรมได้ แต่คุณอาจติดอยู่ในขั้นตอนนี้ โชคดี!


2

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

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

  • นั่งกับโปรแกรมเมอร์ที่มีประสบการณ์ ในประวัติศาสตร์ของฉันมีประมาณสามครั้งเมื่อฉันดูรายการของบุคคลอื่นซึ่งเป็นแรงบันดาลใจอย่างแท้จริง สำหรับพวกเขาพวกเขาแค่เขียนโค้ดและคิดออกมาดัง ๆ ไม่มีการพูดเกินจริงฉันรู้สึกเหมือนฉันซึมซับจากการฟังพวกเขามากกว่าที่ฉันจะทำเองหลายปี หากคุณพบมากขึ้นคุณจะยิ่งร่ำรวย เราโชคดีที่อยู่ในยุคที่เราสามารถดูวิดีโอตรวจสอบแหล่งข้อมูลที่สมบูรณ์และค้นหาร้านค้าออนไลน์ขนาดใหญ่ของความรู้ได้ทันที มันไม่ได้เป็นการทดแทนประสบการณ์แบบตัวต่อตัว แต่ในกรณีที่ไม่มีผู้ให้คำปรึกษาจะเป็นการพัฒนาเนื้อหาแบบดั้งเดิมได้อย่างน่าทึ่ง การดูรหัสที่ผู้อื่นทำเองอาจไม่นำไปสู่อะไรเลย คุณจะต้องมีบางสิ่งบางอย่างในใจและเป็นดีบั๊กเกอร์เพื่อก้าวเข้าสู่ตรรกะ ช่วงเวลาหนึ่งที่ฉันชอบที่สุดคือการทำ Quake mod และมันก็ไม่ใช่ mod ที่ตัวเองมีอะไรที่น่าจดจำ มันเห็นตรรกะในเกมของ Carmack mod เป็นเพียงเหตุผลสำหรับฉันที่จะดำน้ำ

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

  • สุดท้ายอย่ากลัวที่จะเรียนรู้วิธีที่ยากลำบากรับมือของคุณสกปรกทำผิด สิ่งนี้สามารถเรียกได้ว่าเป็นประสบการณ์ ในฐานะที่เป็นตัวอย่างที่เป็นประโยชน์มากขึ้นเกี่ยวกับคำถามของคุณเกี่ยวกับโครงการที่มีรหัสฐานเทอะทะและการนับจำนวนไฟล์ขนาดใหญ่ให้ทำแบบฝึกหัดนี้: ใช้ไฟล์เดียวสำหรับงานของคุณ จริง ๆ แล้วฉันไม่ได้ล้อเล่น คำถามเดียวกันนี้เกิดขึ้นกับ บริษัท ปัจจุบันและ บริษัท ก่อนหน้าของฉัน ที่นี่นักพัฒนาซอฟต์แวร์อีกคนสังเกตว่าฉันต้องการเก็บหนึ่งไฟล์สำหรับแต่ละคลาส เรื่องนี้ดูแปลกสำหรับเขาและในเรื่องที่เกี่ยวข้องเขาก็ไม่ชอบชั้นบางส่วน ดังนั้นวิธีหนึ่งที่จะทำให้คุณเข้าใจว่าเมื่อใดหรือที่ไหนที่เหมาะสมในการแยกลอจิกเป็นไฟล์แยกกันก็คือเริ่มต้นด้วยไฟล์เพียงไฟล์เดียว หลังจากที่คุณฝึกฝนกฎไฟล์เดียวในหลายโครงการหวังว่าจะเพิ่มความซับซ้อน คุณอาจพบโครงการที่คุณมีคลาสจำนวนมากในหนึ่งไฟล์ที่คุณพบว่ามันยากที่จะอ่านหรือเนื่องจากการควบคุมเวอร์ชันยากที่จะทำงานร่วมกัน ณ จุดนี้คุณต้องการสร้างไฟล์แยกกันเพื่อจัดกลุ่มคลาสที่แตกต่างกัน คุณอาจตัดสินใจก่อนว่าคุณชอบคลาสข้อมูลทั้งหมดในไฟล์เดียว จากนั้นอีกครั้งในภายหลังคุณอาจตัดสินใจว่าคุณต้องการแยกไฟล์แม้ระหว่างคลาสข้อมูลเป็นกลุ่ม


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

1

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


1

ดังนั้นจึงมีคำตอบมากมายให้ยกโทษให้ฉันถ้าฉันพูดซ้ำไปซ้ำมาในสิ่งที่พูดไปแล้ว แต่นี่คือ 2 เซ็นต์ของฉัน

ก่อนอื่นให้เลือกแนวคิด ความคิดใด ๆ ที่จะดีสิ่งที่เรียบง่ายอาจจะดีขึ้นแล้วที่มีขนาดใหญ่ โครงการมีแนวโน้มที่จะเติบโตในขอบเขตของพวกเขาอย่างรวดเร็ว (บางคนเรียกมันว่าครีพ)

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

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

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

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

ตอนนี้เลือกคุณสมบัติอื่นแล้วทำซ้ำและทำซ้ำและทำซ้ำ

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

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

เมื่อคุณเสร็จสิ้น (หรืออาจก่อนหน้านี้) คุณจะรู้ว่ารหัสที่คุณเขียนตอนแรกนั้นแย่กว่าที่คุณทำไว้เมื่อเร็ว ๆ นี้ นั่นเป็นเรื่องธรรมชาติอย่างสมบูรณ์และเกิดขึ้นกับพวกเราทุกคน ตอนนี้คุณต้องค้นหาโครงการใหม่และเรียนรู้สิ่งใหม่ - อาจเป็นกลยุทธ์การทดสอบใหม่หรือวิธีการใช้ Service Oriented Architecture


1

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

สิ่งนี้ทำให้คุณมีปัญหาที่ค่อนข้างง่ายด้วยวิธีแก้ปัญหาที่รู้จักกันพอสมควรซึ่งต้องการเพียงระดับของระบบอัตโนมัติ โปรดทราบว่านี่ไม่จำเป็นต้องเป็น MS Word / WordPad / NotePad ถัดไป สิ่งที่แก้ปัญหา (ง่าย) ของคุณ

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


1

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


1

ฉันเดาว่าปัญหาของคุณมาจาก: 1. ความเชื่อมั่นระหว่างทฤษฎีและการปฏิบัติและ ... 2. ... คุณต้องตระหนักว่ารหัสของคุณจะถูกเรียกใช้โดยรหัสของผู้อื่น 3. คุณไม่สามารถเขียนโค้ดอะไรได้หากคุณไม่มีความคิดเกี่ยวกับสิ่งที่คุณสามารถทำได้ 4. คุณรู้ว่าครึ่งหนึ่งของความยากลำบาก

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

  2. เมื่อเรียนรู้วิธีการโปรแกรมส่วนใหญ่เวลาที่เทอร์มินัลถูกใช้กับข้อความอินพุต / เอาต์พุตเนื่องจากเป็นวิธีที่ง่ายที่สุดในการจัดการกับการเขียนโปรแกรม ในความเป็นจริงโปรแกรมเมอร์ใช้ไลบรารี (เช่น Qt), เฟรมเวิร์ก (django ฉันเดา) และรหัสทางลัดอื่น ๆ เพื่อให้เกิดประโยชน์ แน่นอนถ้าคุณรู้สึกว่าคุณสามารถเขียนวงล้อของคุณเองอย่าประดิษฐ์มันใหม่และอ่านหนังสือเกี่ยวกับการออกแบบคอมไพเลอร์และการออกแบบเคอร์เนล: มีหลายสิ่งที่ต้องเรียนรู้ในสิ่งเหล่านี้: บางทีคุณอาจรู้สึกว่ามันโง่ ของ technicity

  3. คิดค้นบางสิ่ง! แน่นอนว่าคุณสามารถแก้ไขข้อความเกม ฯลฯ สิ่งนี้คือคุณจะไม่ทำสิ่งเหล่านี้หากคุณไม่เห็นเหตุผลใด ๆ : โปรแกรมเหล่านี้จะไร้ประโยชน์สำหรับคุณหากทุกสิ่งที่คุณคิดได้ถูกทำไปแล้ว . Personnaly ฉันยังคงฝันที่จะสามารถใช้โพรโตคอล p2p ที่มีการกระจายอำนาจเช่นเดียวกับ facebook ด้วยการแชทข้อความออฟไลน์และอื่น ๆ ทั้งหมดในที่เดียวดังนั้นจึงสามารถใช้กับอุปกรณ์ฝังตัวแบบไร้สายได้ อินเทอร์เน็ตให้ความเป็นไปได้มากมายอย่าลืมคิดดู

  4. อันที่จริงทฤษฎีจำเป็นต้องฝึกฝน แต่นั่นไม่ใช่ทั้งหมด: อัลกอริธึมและเทคนิคไม่ใช่ส่วนหนึ่งของทฤษฎีการเขียนโปรแกรมมีกระบวนทัศน์มากมายและวิธี "มาตรฐาน" อื่น ๆ ในการทำโค้ดของคุณ: รูปแบบการออกแบบรายการที่เชื่อมโยง ฯลฯ


1

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

และต่อมาฉันก็เลือกภาษาสคริปต์ที่ชื่อว่า ActionScript เพื่อเริ่มต้น ภาษาสคริปต์เป็นภาษาเชิงวัตถุและสามารถควบคุมพฤติกรรมของภาพยนตร์ Flash ได้ ภาษาสคริปต์ง่ายสำหรับการทำงานบางอย่างที่ใกล้กับโดเมนปัญหาเช่นเดียวกับtrace("HelloWorld")ใน ActionScript เพื่อส่งออกสตริง และมันมี IDE ที่ทรงพลังเพื่อให้คุณเช็คเอาท์หากโปรแกรมของคุณทำงานได้ดี

ในคำที่ถ้าคุณต้องการที่จะเริ่มต้นการเขียนโปรแกรมในอย่างรวดเร็ววิธีที่เป็นภาษาสคริปต์อาจจะเป็นทางเลือกที่ดี :-)


1

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

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

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.