ทฤษฎีวิทยาศาสตร์คอมพิวเตอร์หนึ่งบิตที่ฉันควรรู้คืออะไร [ปิด]


27

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

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


42
1 (ขอโทษฉันต้อง)
haylem

5
โอ้หรือที่สำคัญที่สุด! (ฉันจะไปแล้ว ... )
เฮย์เล็ม

ทฤษฎีการแลกเปลี่ยนทางวิทยาศาสตร์คอมพิวเตอร์ยืนยันสิ่งที่คนอื่น ๆ ที่นี่กล่าวถึงความซับซ้อนโครงสร้างข้อมูลและอัลกอริทึม cstheory.stackexchange.com/tags
chrisaycock

2
ฉันรู้สึกจำเป็นที่จะคัดค้านคำถามนี้ ไม่มี "หนึ่งบิต" ที่จะเพียงพอที่จะเรียนรู้และยิ่งไปกว่านั้นไม่มี (IMHO) หนึ่งบิตที่สำคัญที่สุด มีหลายแง่มุมที่ (อีกครั้ง IMHO) ที่จำเป็นสำหรับ CS อย่างเท่าเทียมกัน ดังนั้นฉันคิดว่าในขณะที่คำตอบของคำถามนี้อาจจะน่าสนใจ
Konrad Rudolph

1
หากคุณยังไม่ได้มีไอ้งของคุณฉันจะบอกว่าตรรกะบูลีนและ / หรือทฤษฎีจำนวนไม่ต่อเนื่อง เกือบทุกifและloopคำสั่งที่เคยเขียนใช้เป็นส่วนหนึ่งของทั้งสองพื้นที่การศึกษา
Steven Evers

คำตอบ:


52

ถ้าผมต้องเลือกเพียงหนึ่งบิตซึ่งเป็นตัดสินใจที่ยากลำบากผมว่าไปสำหรับโน้ต Big O การทำความเข้าใจเกี่ยวกับความหมายของ O (n), O (ln n), O (n²), O (2 ^ n), O (n!) ช่วยให้คุณหลีกเลี่ยงข้อผิดพลาดที่มีราคาแพงมากชนิดที่ทำงานได้ดีใน สภาพแวดล้อมการทดสอบ แต่ล้มเหลวอย่างมากในการผลิต


2
+1 และฉันจะบอกว่าสำคัญกว่าที่การรู้ว่า O (n ^ 2) นั้นแย่กว่า O (lg n) (ตัวอย่าง) คือการรู้วิธีการรับ Big-O สำหรับโค้ดที่กำหนด
Dean Harding

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

แมกนัส: จากประสบการณ์ของฉันคนที่ไม่ได้เขียนโปรแกรมส่วนใหญ่ไม่ได้คิดเกี่ยวกับความซับซ้อนเลยพวกเขาจะถือว่า O (n) สำหรับปัญหาทั้งหมดโดยสังเขป
281377

ฉันยังไม่ต้องการสิ่งนี้อย่างเป็นทางการ
CaffGeek

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

19

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


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

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

@ การเรียกเก็บเงิน: แน่นอน แต่ส่วนนั้นเป็นสิ่งหนึ่งที่คุณไม่จำเป็นต้องผ่านการฝึกฝน ทฤษฎีมีประโยชน์มากในส่วนนั้น
Mnementh

12

เรียนรู้เกี่ยวกับโครงสร้างข้อมูลอัลกอริทึมและความซับซ้อน

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

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

ความรู้เกี่ยวกับการสร้างแบบจำลองฐานข้อมูลเป็นสิ่งจำเป็นเช่นกัน

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


ข้อมูลเฉพาะ - มีอัลกอริทึมและโครงสร้างข้อมูลจำนวนมาก
Jon Hopkins

เพียงแค่คนพื้นฐานที่จะได้รับความคิดของสิ่งต่าง ๆ หยิบหนังสือที่ไม่หนาเกินไปและใช้มันให้ผ่าน

1
มันค่อนข้างมากกว่าหนึ่งบิต

7

นี้เป็นบิตของคำถามที่ยาก

ทุกแง่มุมของวิทยาศาสตร์คอมพิวเตอร์มีความสำคัญไม่ทางใดก็ทางหนึ่ง

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

การเข้าใจสัญลักษณ์ Big O เป็นสิ่งสำคัญและการเข้าใจถึงวิธีการเรียกใช้โค้ดของคุณนั้นมีความสำคัญมากในสถานการณ์จริง


7

ใช่นี่ทำให้ฉันคิดถึงชั่วโมง

ในกระบวนการฉันต้องลบคำตอบทั่วไปบางส่วนที่ให้ไว้ที่นี่แล้ว

ไม่มีรายการ

  1. Big O (n) สัญกรณ์ ยากที่จะนำมาไว้ที่นี่ แต่ไม่เราสามารถทำงานอย่างไม่มีประสิทธิภาพและเปรียบเทียบชุดของขั้นตอนที่แตกต่างกันโดยไม่ต้องแม้แต่ได้ยินจากระยะไกลจากการวิเคราะห์อัลกอริทึมแบบซีมโทติค

  2. ภาษาที่ใช้งานได้ ไม่มีภาษาตระกูลเดียวเป็นเพียงวิธีหนึ่งในการคิดเกี่ยวกับปัญหา เหตุใดบิตนี้จึงสำคัญ

  3. ปัญหาการหยุดชะงัก บางคนมีความเฉพาะเจาะจงเกินไปและผู้คนใช้ชีวิตโดยไม่รู้ตัว

  4. ฟัง ถ้าคุณไม่ฟังคุณก็อยู่ในโลกของคุณเอง ไม่จำเป็นต้องเป็นอันตราย!

  5. วงจรการพัฒนาซอฟต์แวร์ไม่ ! เรายังสามารถรบกวนวิธีการใช้ซอฟต์แวร์ที่น่าทึ่งหรือความพยายามอย่างกล้าหาญเดี่ยว

  6. ทฤษฎีความซับซ้อน ฉันเดาว่ามันอาจเป็นได้ แต่ไม่มีพิธีการทั้งหมด

ความคิดหนึ่งเดียวจาก Comp Science

ฉันจะบอกว่า - " Abstractions Abstractions Abstractions ... " เรียนรู้เกี่ยวกับมัน ดูตัวอย่างรอบ ๆ และเรียนรู้วิธีสร้างโดยใช้มัน มันคือทุกที่ วิทยาศาสตร์คอมพิวเตอร์วิศวกรรมและแอพพลิเคชั่นทั้งหมดมีลักษณะคล้ายกับเลเยอร์ของสิ่งที่เป็นนามธรรม

เมื่อคุณรู้สิ่งนี้คุณจะเริ่มเรียนรู้ที่จะมองไปรอบ ๆ

เมื่อคุณเห็นบางคนใช้list insertionในpythonและnot appendคุณยิ้มเพราะคุณรู้ว่ารายการงูหลามถูกสร้างขึ้นโดยใช้นามธรรม abstraction ที่แทรกมีราคาแพงและผนวกราคาถูกกว่า

นี่เป็นเพียงตัวอย่างเดียว


+1 สำหรับคำตอบที่คุณคิดมาก
Jon Hopkins

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


3

กรณีการใช้งานที่แข่งขันได้ของโครงสร้างข้อมูล

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


3

มีเพียงสามหมายเลขเท่านั้นที่มีความสำคัญ:

  • ศูนย์
  • หนึ่ง
  • จำนวนมาก

แต่นั่นไม่ได้หมายความว่า '3' ก็มีความหมายเช่นกัน?
Javier

มันควรจะเป็นศูนย์หนึ่งและอินฟินิตี้: en.wikipedia.org/wiki/Zero_One_Infinity
Thomas Owens

@ จาเวียร์: 3 เป็นเซตย่อยของหลาย ๆ คน
สตีเฟนเอ. โลว์

@Thomas: พูดว่าใคร
Steven A. Lowe

@Steven ความเข้าใจของฉันอาจไม่ใช่ 100% ที่นี่ แต่ฉันคิดว่าความคิดคือคุณไม่มีสิ่งใดสิ่งหนึ่งหรือจำนวนสิ่งที่คุณควรได้รับการ จำกัด หากคุณไม่ได้ จำกัด อยู่ที่ไม่มีหรืออินสแตนซ์เดียวคุณไม่ควร จำกัด อินสแตนซ์ อย่างไรก็ตามฉันไม่แน่ใจว่าทำไมในกรณีนี้ (ฉันคุ้นเคยกับแนวคิด Zero / One / Infinity เท่านั้น)
Thomas Owens

3

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


คุณหมายถึงอะไรจากความผันผวนอย่างแน่นอน?
amara

3

ปัญหาการหยุดชะงัก

ความจริงที่ว่าปัญหาเกี่ยวกับคอมพิวเตอร์นั้นมีอยู่ซึ่งไม่สามารถแก้ไขได้ด้วยคอมพิวเตอร์


3

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

ภาษาที่เป็นทางการที่สำคัญที่สุดคือระดับที่อ่อนแอที่สุดถึงมากที่สุด:

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

  2. ภาษาที่สามารถแยกวิเคราะห์โดยออโตมาตะกับหน่วยความจำสแต็กหรือไวยากรณ์ที่ไม่มีบริบท

  3. ภาษาที่สามารถแยกวิเคราะห์โดยเครื่องทัวริงหรือออโตมาตาพร้อมหน่วยความจำเข้าถึงโดยสุ่ม


อืมไม่. การแสดงออกปกติแยกวิเคราะห์ไวยากรณ์ปกติ นั่นคือหมวดหมู่ของไวยากรณ์ที่สามารถยอมรับได้โดยสถานะออโตมาตา จำกัด และ 'Chomsky Grammar' ไม่ได้อ้างถึงไวยากรณ์ฟรีตามบริบทซึ่งเป็นกระบวนการของเครื่องสแต็ก
philosodad

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

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

หรือเพื่อให้แม่นยำยิ่งขึ้น: คุณต้องการสแต็กหรือไม่ก็ได้ หากคุณต้องการสแต็กในการวิเคราะห์ภาษาคุณต้องมีสแต็กเพื่อแยกภาษาดังนั้นหากภาษาต้องการสแต็กเพื่อแยกวิเคราะห์ภาษาคุณสามารถแยกภาษานั้นได้
philosodad

@philosodad - มีการแสดงออกปกติสองประเภท - การแสดงออกปกติในทางทฤษฎีและการแสดงออกปกติตามที่นำมาใช้ในซอฟต์แวร์ คุณถูกต้องเกี่ยวกับการแสดงออกปกติทางทฤษฎี แต่การใช้งานส่วนใหญ่มีคุณสมบัติหลายอย่างนอกเหนือจากพื้นฐานทางทฤษฎีของพวกเขาและสามารถจับคู่ภาษาที่ไม่ปกติบางอย่างเช่น ^ n สำหรับ non prime เนื่องจากนี่เป็นหัวข้อเกี่ยวกับทฤษฎีในทางปฏิบัติฉันจึงออกไปเพื่อพูดถึงว่ามีความแตกต่างระหว่างคำจำกัดความที่เป็นทางการกับคำที่ใช้ในป่า
Dan Monego

2

ฉันจะให้คำตอบที่น่าเบื่อ: ทฤษฎีออโตมาตะและทฤษฎีสารสนเทศ

หรือฉันจะบอกสิ่งที่ฉันเรียนรู้จากที่ปรึกษาด้านฮาร์ดแวร์เมื่อนานมาแล้ว:

  • "ดีพอ" ไม่ดีพอ

1

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


2
กฎของเมอร์ฟี: สิ่งใดก็ตามที่ผิดพลาดได้จะผิดพลาด
Richard

ไม่ใช่ทฤษฎี CS แต่นี่เป็นคำตอบที่ยอดเยี่ยม
justkt

1

การเขียนโปรแกรม

จากภาควิชาคณิตศาสตร์และวิทยาศาสตร์คอมพิวเตอร์โฮบาร์ตและวิลเลียมสมิ ธ วิทยาลัยมาวิทยาการคอมพิวเตอร์ 124 รู้เบื้องต้นเกี่ยวกับการเขียนโปรแกรม :

หัวข้อต่างๆรวมถึงโครงสร้างการควบคุมวัตถุคลาสการสืบทอดโครงสร้างข้อมูลอย่างง่ายและแนวคิดพื้นฐานของการพัฒนาซอฟต์แวร์

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

และใช่ฉันสังเกตว่าคุณเป็นโปรแกรมเมอร์ นี่คือการปรับปรุงความรู้โดยรวมของคุณเกี่ยวกับทฤษฎีการเขียนโปรแกรมและวิธีการอื่น ๆ ที่มีให้คุณ

การเขียนโปรแกรมวิทยาการคอมพิวเตอร์เป็นที่เรารู้หรือไม่?

ในการตอบกลับความคิดเห็นจาก @Thomas Owens ผู้ซึ่งชี้ให้เห็น (ค่อนข้างถูกต้อง) ว่าการเขียนโปรแกรมไม่ใช่วิทยาศาสตร์คอมพิวเตอร์อย่างเคร่งครัดฉันต้องการอ้างอิงจากบทความวิทยาศาสตร์คอมพิวเตอร์ของ Wikipedia :

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

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


การเขียนโปรแกรมไม่ใช่ทฤษฎี CS ในความเป็นจริงฉันสามารถโต้แย้งได้อย่างง่ายดายว่าการเขียนโปรแกรมไม่ใช่วิทยาศาสตร์คอมพิวเตอร์เลย
Thomas Owens

@Thomas Owens ฉันได้อัปเดตคำตอบเพื่อสำรองการอ้างสิทธิ์ของฉันแล้วว่าถูกต้อง คุณช่วยตรวจสอบและแจ้งให้เราทราบความคิดของคุณ
Gary Rowe

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

@ Thomas Owens ฉันเห็นจุดของคุณและ (ใส่หมวกพิถีพิถัน) ฉันเห็นด้วย อย่างไรก็ตาม OP กำลังขอ CS หนึ่งบิตที่จะช่วยเขาในโลกแห่งความจริง ฉันถือความคิดของฉันอย่างรวดเร็วว่าทฤษฎีการเขียนโปรแกรม (ตามที่ใช้ในโค้ดที่ดี) คือหนึ่งบิต ฉันแก้ไขตามนั้นเล็กน้อย
Gary Rowe

ใช่. จาก CS ฉันจะบอกว่าการเข้าใจภาษาโปรแกรมและกระบวนทัศน์อาจช่วยได้ (โดยเฉพาะถ้าคุณใช้ DSL แต่รู้ว่ากระบวนทัศน์จำนวนมากเช่นขั้นตอนการทำงาน OO ตรรกะช่วยในการพัฒนาซอฟต์แวร์) การเข้าใจอัลกอริธึมและโครงสร้างข้อมูลยังช่วยให้คุณเลือกสิ่งที่ถูกต้องเพื่อแก้ไขปัญหาของคุณอย่างมีประสิทธิภาพสูงสุด ทฤษฎี Automata อาจช่วยได้ (ฉันทำงานกับระบบที่เป็น FSM ขนาดใหญ่เพียงครั้งเดียว แต่ฉันไม่ทราบว่าเป็นเรื่องธรรมดามาก) ดังนั้นฉันจะบอกว่าโครงสร้างข้อมูลอัลกอริทึมและทฤษฎี PL จะเป็นสิ่งที่มีประโยชน์ที่สุดที่รู้จาก CS
Thomas Owens

1

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

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

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


3
คำตอบนี้ไม่ได้เกี่ยวข้องกับทฤษฎี CS ซึ่งเป็นสิ่งที่ฮอปกินส์ถาม
James

1

ภาษาหน้าที่!

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

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


0

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


-2

การแก้ปัญหาและความปรารถนาที่จะเรียนรู้อย่างต่อเนื่อง!

พวกเขาให้บริการฉันดีกว่ารู้การเรียงลำดับอย่างรวดเร็วและการน


6
นั่นไม่ใช่ทฤษฎีวิทยาศาสตร์คอมพิวเตอร์ แต่ใช้กับวิศวกรรมอิเล็กทรอนิกส์ (หรือรูปแบบอื่น ๆ ) อย่างเท่าเทียมกัน
Jon Hopkins

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

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