edit-article
Home
Up
Delete
Article Name:
Article Description:
] by Matt Might - a comprehensive listing of skills(28) for computer science students(CS), aka future programmers/developers, by a university professor in the midst of re assessing their current curriculum
Chapter ID/Name:
Status:
Write
Writing
Written
Add Photo:
Owner ID:
Content:
use HTML
Edit Content
<h1 style="text-align: center;">what computer science majors should know (2015)</h1> <h2>[WHAT]</h2> <ol> <li>] another look at what computer science majors should know</li> </ol> <h2>[WHY]</h2> <ol> <li>] What should every student know to get a good job?</li> <li>] What should every student know to maintain lifelong employment?</li> <li>] What should every student know to enter graduate school?</li> <li>] What should every student know to benefit society?</li> </ol> <h2>[WHERE]</h2> <ol> <li><strong>] READ THE FULL ARTICLE</strong></li> <ol> <li>] <a href="http://matt.might.net/articles/what-cs-majors-should-know/" target="_blank">http://matt.might.net/articles/what-cs-majors-should-know/</a></li> </ol></ol> <h2>[WHEN]</h2> <ol> <li><strong>] build a portfolio, not a resume</strong></li> <ol> <li>] example blog with posts about projects, doc open source contribs, github</li> </ol> <li><strong>] learn technical communication</strong></li> <ol> <li>]</li> </ol> <li><strong>] an engineering core</strong></li> <ol> <li>] CS is not engineering but its close enough, will work with traditional engineers, need to speak the same language</li> <li>] language rooted in real analysis, linear algebra, probability and physics.</li> <li>] In constructing sound simulations, a command of probability and (often times) linear algebra is invaluable. In interpreting results, there is no substitute for a solid understanding of statistics.</li> </ol> <li><strong>] the unix philosophy</strong></li> <ol> <li>] The Unix philosophy (as opposed to Unix itself) is one that emphasizes linguistic abstraction and composition in order to effect computation. </li> <li>] In practice, this means becoming comfortable with the notion of command-line computing, text-file configuration and IDE-less software development</li> </ol> <li><strong>] fluent in basic unix ability</strong></li> <ol> <li>] navigate and manipulate the filesystem;</li> <li>] compose processes with pipes;</li> <li>] comfortably edit a file with emacs and vim;</li> <li>] create, modify and execute a Makefile for a software project;</li> <li>] write simple shell scripts.</li> </ol> <li><strong>] advantages of the unix way</strong></li> <ol> <li>]</li> </ol> <li><strong>] system administration</strong></li> <ol> <li>] must be able to competently and securely administer their own systems and networks. Many tasks in software development are most efficiently executed without passing through a systems administrator.</li> </ol> <li><strong>] system admin tasks</strong></li> <ol> <li>] Install and administer a Linux distribution.</li> <li>] Configure and compile the Linux kernel.</li> <li>] Troubleshoot a connection with dig, ping and traceroute.</li> <li>] Compile and configure a web server like apache.</li> <li>] Compile and configure a DNS daemon like bind.</li> <li>] Maintain a web site with a text editor.</li> <li>] Cut and crimp a network cable.</li> </ol> <li><strong>] programming languages</strong></li> <ol> <li>] While it is important to teach languages relevant to employers, it is equally important that students learn how to teach themselves new languages.</li> <li>] The best way to learn how to learn progamming languages is to learn multiple programming languages and programming paradigms.</li> <li>] Yet, to <em>truly</em> understand programming languages, one must implement one. Ideally, every computer science major would take a compilers class. At a minimum, every computer science major should implement an interpreter.</li> <li>] LIST languages = Racket, C , JavaScript, Java, Standard ML, prolog, Scala, Haskell, C++ and Assembly</li> </ol> <li>] discrete mathematics</li> <li>] data structures and algorithms</li> <li>] theory</li> <li>] architecure</li> <li>] operating systems</li> <li>] networking</li> <li>] security</li> <li>] cryptography</li> <li>] software testing</li> <li>] ux design</li> <li>] visualization</li> <li>] parallelism</li> <li>] software engineering</li> <li>] formal methods</li> <li>] graphics and simulation</li> <li>] robotics</li> <li>] artificial intelligence</li> <li>] machine learning</li> <li>] databases</li> </ol> <h2>[EXAMPLE]</h2> <ol> <li><strong>] AUTO SUMMARY by SMMRY.COM</strong></li> <ol> <li>Having emerged from engineering and mathematics, computer science programs take a resume-based approach to hiring off their graduates.</li> <li>Computer scientists should be comfortable with and practiced in the Unix philosophy of computing.</li> <li>Computer scientists should understand generative programming; lexical scope; closures; continuations; higher-order functions; dynamic dispatch; subtyping; modules and functors; and monads as semantic concepts distinct from any specific syntax.</li> <li>More important than knowing a specific algorithm or data structure, computer scientists must understand how to design algorithms and how to span the gap between an algorithm in the ideal and the nitty-gritty of its implementation.</li> <li>Computer scientists should understand a computer from the transistors up.</li> <li>Computer scientists must be aware of the means by which a program can be compromised.</li> <li>If for no other reason than its outsized impact on the early history of computing, computer scientists should study artificial intelligence.</li> </ol></ol> <h2>[HOW-TO]</h2> <ol> <li>]</li> </ol> <h2>[REFERENCE]</h2> <ol> <li>] # 4430 - <a href="/view/task?id=4430" target="_blank">learning to code</a></li> </ol> <h1 style="text-align: center;"> </h1>