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


80

ฉันเป็นผู้เริ่มต้นในการเขียนโปรแกรมและฉันอ่านหนังสือศึกษาอ่านบทความและอะไรก็ตาม ฉันได้รับผลลัพธ์ที่ยอดเยี่ยมตั้งแต่ฉันเริ่มเรียนรู้การเขียนโปรแกรมและเมื่อฉันเป็นผู้เริ่มต้นฉันเคยคิดว่าฉันรู้ทุกอย่างเกี่ยวกับการเขียนโปรแกรม แต่เมื่อฉันเรียนรู้มากขึ้นฉันก็รู้ว่าฟิลด์นี้ยากแค่ไหน แต่ไม่ thats จุด).

ทุกวันนี้ฉันได้เขียนซอฟต์แวร์ที่ใช้งานได้และฉันได้เรียนรู้พื้นฐานของ 3 ภาษาและฉันเป็นสื่อกลางในภาษาเดียว เมื่อฉันดูสิ่งต่าง ๆ ขั้นสูงเช่น MYSQL หรือการเขียนโปรแกรม OpenGL หรือแม้แต่รหัส Visual Studio C ++ มันทำให้ฉันปวดหัวและแม้กระทั่งการแสดงภาพซอร์สโค้ด HTML ของเว็บไซต์จำนวนมาก (ซอร์สโค้ดส่วนใหญ่บนเว็บไซต์ที่เห็นโดย Google chrome ดูเหมือนยุ่งมาก ) ทำให้ฉันสับสนถึงขีด จำกัด ของสมอง ทุกอย่างดูเรียบง่ายในตอนแรก แต่เมื่อมองไปที่สิ่งที่ก้าวหน้าเหล่านี้มันทำให้ฉันสงสัยว่าจะเรียนรู้ได้มากแค่ไหน

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


24
ฉันขอแนะนำให้คุณอ่าน: norvig.com/21-days.html
James P.

ชอบอะไรก็ได้ใช่ จนกว่าเทคโนโลยีจะเปลี่ยนคุณ :-)
MathAttack

3
ตราบใดที่ "ประสบการณ์" ของคุณไม่ได้อ่านสิ่งเดียวกันซ้ำไปซ้ำมา ยืดตัวเองด้วยสิ่งใหม่ ๆ
JeffO

เคล็ดลับเล็ก ๆ สำหรับการวิเคราะห์หน้า HTML ที่ซับซ้อนคุณต้องการใช้ Firefox ของ Firebug หรือองค์ประกอบการตรวจสอบของ Chrome
Lie Ryan

6
"เมื่อฉันเป็นมือใหม่ฉันเคยคิดว่าฉันรู้ทุกอย่างเกี่ยวกับการเขียนโปรแกรม" เมื่อฉันอยู่ที่นั่นและยิ่งฉันเรียนรู้ฉันก็ยิ่งรู้ว่าฉันรู้น้อยแค่ไหน
Lieven Keersmaekers

คำตอบ:


134

คำตอบสั้น ๆ : ไม่

คำตอบยาว:

การอ่านรหัสของคนอื่นง่ายขึ้นใช่ แต่อ่านเท่านั้น เมื่อคุณได้รับประสบการณ์และทักษะความต้องการส่วนบุคคลของคุณในฐานะนักพัฒนาเพิ่มขึ้น

  • คุณไม่ต้องการเพียงแค่เขียนรหัส คุณต้องการที่จะเขียนรหัสที่สวยงาม

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

  • คุณไม่ได้อ่านและเขียนรหัสในภาษาเดียวที่คุณรู้ ในฐานะนักพัฒนาที่มีทักษะคุณจะรู้ว่าการแก้ปัญหาเฉพาะที่คุณมีอยู่ในขณะนี้การเขียนโปรแกรมการทำงานเป็นทางเลือกที่ดีกว่ามากดังนั้นตอนนี้คุณต้องอ่านและเขียนโค้ดในภาษาโปรแกรมการทำงาน

  • คุณไม่ได้ จำกัด ตัวเองกับห้องสมุดขนาดเล็กที่คุณรู้จัก หากคุณโค้ดใน C # คุณต้องการรู้และใช้พลังเต็มรูปแบบของไลบรารีจำนวนมากของ. NET Framework

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

  • คุณไม่ต้องการที่จะถ่อมตัวจำกัด ตัวเองให้ชุดพื้นฐานของเครื่องมือภาษาที่จะช่วยให้คุณ ใน C # คุณต้องการใช้ generics, สัญญารหัส, การสะท้อน, การพัฒนาที่ขับเคลื่อนด้วยเหตุการณ์, หน้าที่การทำงานกับ LINQ, ส่วนขยายปฏิกิริยาและสิ่งอื่น ๆ ที่คุณได้เรียนรู้ทั้งหมดในโครงการเดียวถ้าสิ่งเหล่านั้นช่วยให้คุณเขียนได้ดีขึ้น รหัส.

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

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

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

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

ในระยะสั้น:

  1. วันแรกที่คุณเริ่มเรียนรู้ที่จะเขียนโปรแกรมงานที่แสดงรายการตัวเลขทั้งหมดตั้งแต่ 1 ถึง 100 หารด้วยสองนั้นซับซ้อนมาก: คุณเพิ่งเรียนรู้วิธีทำลูปและแสดงตัวเลขบนหน้าจอ แต่คุณไม่รู้ว่าจะหาได้อย่างไร จำนวนหารด้วยสอง

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

  3. ... และคุณสงสัยว่า "ฉันจะทำอย่างนั้นได้อย่างไร?" ในลักษณะเดียวกับที่คุณทำเมื่อสิบปีก่อนเมื่อคุณต้องแสดงตัวเลขบนหน้าจอด้วยการวนซ้ำ

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

การบรรลุความสมบูรณ์แบบในโดเมนที่กว้างใหญ่เท่ากับการพัฒนาซอฟต์แวร์เป็นไปไม่ได้ไม่ว่าคุณจะฉลาดแค่ไหน


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

9
"การเขียนโปรแกรมการทำงานเป็นทางเลือกที่ดีกว่ามาก " เป็นที่ถกเถียงกัน
jfs

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

7
ฉันจะทราบด้วยว่า "การรวบรวมข้อกำหนดเป็นเวลาหลายเดือน" โดยไม่มีการพัฒนาเกิดขึ้นในแบบจำลองน้ำตกในอุดมคติ หากคุณไม่ได้ทำซ้ำคุณจะฆ่าตัวเองและโครงการ
Ben Brocka

8
"ไม่เคยง่ายไปกว่านี้คุณจะได้เร็วขึ้น" / Greg LeMond /
daGrevis

20

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

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

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


18

มีคำตอบที่ดีจริงๆที่นี่แล้ว แต่ฉันคิดว่าฉันอาจเพิ่มคะแนนสั้น ๆ เพิ่มเติม:

เมื่อฉันเป็นผู้เริ่มต้นฉันเคยคิดว่าฉันรู้ทุกอย่างเกี่ยวกับการเขียนโปรแกรม แต่เมื่อฉันเรียนรู้มากขึ้นฉันก็รู้ว่าเรื่องนี้ยากเพียงใด

นี้เรียกว่าผลการติดตามหนี้-Kruger มันเป็นเรื่องธรรมดามากในหมู่โปรแกรมเมอร์ผู้เริ่มต้นและในความเป็นจริงผู้เริ่มต้นในหลายสาขา

ซอร์สโค้ดส่วนใหญ่บนเว็บไซต์ที่ Google Chrome มองเห็นนั้นดูยุ่งเหยิงและไม่มีระเบียบ

คนที่เขียนเว็บไซต์เหล่านั้นต้องการให้คุณเข้าใจพวกเขาหรือไม่? อาจจะไม่. พวกเขามีความสนใจที่จะมีรหัสที่เข้าใจได้ยาก

มันทำให้ฉันสงสัยว่าจะเรียนรู้ได้มากขนาดไหน

โดยมีความเชี่ยวชาญ ฉันเป็นผู้เชี่ยวชาญในสาขาแคบพิเศษ: การออกแบบและการใช้งาน C # compiler semantic analyzers หากฉันใช้เวลาสิบห้าปีในการศึกษา OpenGL หรือ XML หรือ HTML หรืออะไรก็ตามฉันจะเป็นผู้เชี่ยวชาญในเรื่องนั้นและได้รับการวิเคราะห์โดยนักวิเคราะห์ความหมาย แต่ฉันไม่ได้ทำดังนั้นฉันจึงมีความเข้าใจพื้นฐานเกี่ยวกับ OpenGL, XML และ HTML เท่านั้น

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

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

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

หัวข้อที่ซับซ้อนตามที่ระบุไว้ข้างต้น (OpenGL, MySQL, ไซต์ html ขั้นสูง) กลายเป็นเรื่องง่ายต่อการอ่านเขียนและทำความเข้าใจเมื่อคุณเรียนรู้มากขึ้นหรือแค่ซับซ้อนขึ้นเมื่อคุณไป

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

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

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


2
ขอบคุณมากสำหรับคำตอบนี้มันอยู่เหนือคนอื่นเพราะไม่เพียง แต่ตอบคำถามหลักของฉัน แต่ยังเปิดตาของฉันในบางสิ่ง +1
Bugster

@ เอริค: คุณจะพูดอะไรกับคนในหัวข้อแบบนี้ที่เขาบอกว่า "ความเชี่ยวชาญสำหรับแมลงไม่ใช่มนุษย์"?
Joan Venge

@JoanVenge บางคนจะพูดอย่างนั้นเหรอ? โดยปกติแล้วคนเราล้วนมีความเชี่ยวชาญและมีความเป็นเอกลักษณ์และอื่น ๆ อีกมากมายดังนั้นหากพวกเขารู้สึกว่าจำเป็นที่จะต้องแยกตัวเองออกจากสัตว์ (หรือแมลง)
Matthew อ่าน

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

+1 สำหรับเลือกชิ้นส่วนที่คุณชอบซึ่งคุณสามารถเพิ่มมูลค่าที่แท้จริงและกลายเป็นผู้เชี่ยวชาญในนั้น
Akshay Khot

14

คำตอบสั้น ๆ ใช่

เวลาและการรับสิ่งเหล่านี้ง่ายต่อการเข้าใจ

จำไว้ว่าเมื่อคุณดูไซต์จากเครื่องมือ dev ในเบราว์เซอร์ของคุณพวกมันมักจะถูกสร้างโดยเฟรมเวิร์ก ปล่อยให้เป็นหลาย ๆ อย่าง ... ASP.NET, JSP, RoR, Django, ... ใครจะรู้ เฟรมเวิร์กเหล่านี้บางตัวสร้างโค้ดที่สะอาดกว่าตัวอื่น ๆ

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


1
มีความจริงเกี่ยวกับเรื่องนี้ตราบใดที่ผู้เขียนรหัสใช้วิธีปฏิบัติที่ดีและสำนวนปกติของทั้งภาษาโดยเฉพาะและของโปรแกรมเมอร์โดยทั่วไป การเข้ารหัสที่ไม่ถูกต้องและ / หรือความงงงวยโดยเจตนาสามารถทำให้คุณช้าลงในการรวบรวมข้อมูล ลองลดลงCodeGolf.SE แม้แต่รุ่น "ชัดเจน" อาจเป็นเรื่องยากเพราะการปฏิบัติที่ดีได้รับการเสียสละที่เขาปรับเปลี่ยนการแข่งขัน
dmckee

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

2

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

ตัวอย่างหนึ่งที่คุณให้มาคือการดูโค้ด HTML จำนวนมาก:

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

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

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


2

คำตอบสั้น ๆ คือใช่ แต่ส่วนมากขึ้นอยู่กับว่าคุณนิยามประสบการณ์อย่างไร

ฉันคิดว่ามีอย่างน้อย 3 ส่วนในการพัฒนา เมื่อคุณดีขึ้นในแต่ละเซ็กเมนต์บางสิ่งก็ชัดเจนขึ้น

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

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

  3. เข้าใจความต้องการภาษา เช่นเดียวกับที่คนอื่นพูดถึงยิ่งคุณมีประสบการณ์ในการใช้ภาษามากเท่าไหร่คุณก็ยิ่งสามารถอ่านได้เร็วขึ้นว่า coder ดั้งเดิมพยายามทำอะไรให้สำเร็จ แต่ถ้าไม่มี # 1 และ # 2 คุณจะพบว่าความสามารถที่เพิ่มขึ้นนี้เพิ่มขึ้นอย่างรวดเร็ว

พยายามที่จะมีส่วนร่วมในการพัฒนาหลายด้านเพราะมันจะไม่ง่ายขึ้นจนกว่าคุณจะทำทุกด้านอย่างน้อยสองสามครั้ง

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


2

มันง่ายขึ้นและซับซ้อนขึ้นในเวลาเดียวกัน!

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

แปลเป็นการพัฒนาซอฟต์แวร์

การรู้เทคโนโลยีจำนวนมากเป็นภูมิปัญญา (ทุกสิ่งสืบเชื้อสายมาจาก ALGOL) การ
รู้ว่าคุณไม่รู้อะไรคือการรู้แจ้ง (LISP) การ
เรียนรู้ภาษาเฟรมเวิร์กและแพลตฟอร์มจำนวนมากต้องใช้ความพยายามอย่างมาก (Java) การ
เรียนรู้เฉพาะสิ่งที่คุณต้องรู้และต้องการความแข็งแกร่งเท่านั้น (และ Google หรือ stackoverflow.com) การ
รู้ว่าเมื่อใดที่จะหยุดการเข้ารหัสและส่งมอบบางสิ่งก็คือเมื่อคุณรู้ดีพอ (ไม่มีการวิเคราะห์เป็นอัมพาตหรือชุบทอง)
ทำงานต่อไปในสิ่งที่คุณพยายามที่จะบรรลุมันต้องมีการมุ่งเน้นและจะมีพลัง (ทุกอย่างเปลี่ยนแปลงอยู่ตลอดเวลาคุณยังไม่จบ)
ติดกับหนึ่งหรือสองเทคโนโลยีและคุณจะอดทน (COBOL ยังคงจ่ายดีเช่นเดียวกับ C)
หากต้องการออกจากการเขียนโปรแกรมและย้ายไปที่การจัดการจะต้องอยู่ตลอดไป (หรือปล่อยให้เป็นมรดกของซอฟต์แวร์ FOSS ที่ทุกคนจะยังคงใช้งานได้ดีหลังจากที่คุณตาย)


ดังนั้นแทนที่จะเป็นมดคุณควรจะเป็นแมลงสาบและลุกขึ้นเมื่อมันทำให้คุณงุนงงใช่ไหม? :-P
Bugster

"Analysis Paralysis"! = "รู้ว่าเมื่อใดควรหยุดการเข้ารหัส" มันเป็นมากกว่า "รู้ว่าเมื่อใดที่จะเริ่มการเข้ารหัส"
Ben Voigt

0

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

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

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

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


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

ตัวอย่างเช่นทั้งสามภาษาที่คุณพูดถึง (MYSQL, OpenGL, C ++) มีคุณสมบัติทั่วไป:

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

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

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


0

คำตอบสั้น: ใช่ในทั่วไป

อย่างไรก็ตามคุณจะไม่เป็นผู้เชี่ยวชาญหากคุณพูดคุยทั่วไป การเป็นผู้เชี่ยวชาญยังหมายถึงการตระหนักถึงทุกสิ่งที่คุณไม่รู้: นี่เป็นความรู้สึกที่ท่วมท้น

เมื่อคุณก้าวผ่านกาลเวลาคุณจะได้รับประสบการณ์

เมื่อคุณก้าวผ่านเวลาภาษาอื่น ๆ / รูปแบบอื่น ๆ ก็กำลังพัฒนาควบคู่ไปกับการพัฒนาของคุณ

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

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


0

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

รูปแบบทั้งหมดเหล่านี้มีความซับซ้อนสองมิติ

  1. คำศัพท์และไวยากรณ์ต่างกัน
  2. abstractions (แนวคิดระดับสูง) ที่พวกเขาสนับสนุนแตกต่างกัน

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

จากนั้นสลับไปที่ "สิ่งง่าย ๆ " เช่น CSS, HTML, Javascript และอาจเป็นเฟรมเวิร์กเช่น Bootstrap และ React และสมองของคุณจะทอดมัน - เช่นเดียวกับ Albert Einstein ผู้คนคิดว่า "ฉันรู้ภาษาฝรั่งเศสดังนั้นการเรียนภาษาเยอรมันจึงง่าย" No!

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

คนส่วนใหญ่ใช้เวลา 1-2 ปีในการพูดภาษาใหม่และนายจ้างรู้ดีว่า นั่นเป็นเหตุผลที่พวกเขาไม่จ้างคนที่ไม่มีประสบการณ์ในภาษาของพวกเขาเพราะพนักงานใหม่จะใช้เวลาส่วนใหญ่ในการต่อสู้กับภาษาและมีเวลาไม่เพียงพอที่จะแก้ไขปัญหาทางธุรกิจได้

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


-1

หัวข้อที่ซับซ้อนตามที่ระบุไว้ข้างต้น (OpenGL, MySQL, ไซต์ html ขั้นสูง) กลายเป็นเรื่องง่ายต่อการอ่านเขียนและทำความเข้าใจเมื่อคุณเรียนรู้มากขึ้นหรือแค่ซับซ้อนขึ้นเมื่อคุณไป คุณจะต่อสู้กับความรู้สึกนี้ว่าคุณเป็นมดในโลกแห่งการเขียนโปรแกรมได้อย่างไร

เมื่อมีความก้าวหน้าใด ๆ เราจะเรียนรู้และเรียนรู้สิ่งที่เราคิดว่าเรารู้มาก่อน - เฮนรีเดวิด ธ อโร

มีเรื่องเล่าของเป็นอาจารย์เซนและล้นถ้วยน้ำชา

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

ข้อควรจำ:หากคุณรู้สึกสับสนกับแนวคิดใหม่คุณต้องมองหาครูหลายคน

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

ทัศนคติของคุณสร้างความแตกต่าง

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