24 ms·
I am sorry but this is neither complete nor a plan how to become a software engineer. This is a list of trivia to get you through a coding interview conducted
by janoc 9y ago
I am sorry but this is neither complete nor a plan how to become a software engineer.
This is a list of trivia to get you through a coding interview conducted by a clueless HR department that equates engineering skill with remembering answers to test questions. Nothing more.
None of the stuff in the list will actually teach you how to apply these techniques nor when to apply them (and when to stay away!) - which is much more important to know than to remember how to balance a red black tree or to sort a list.
The algorithms you can always look up - and frankly, how often does an average engineer implement something like that today instead of using a library? However, knowing when to use which technique or algorithm is absolutely essential.
What am I missing completely is foundations of mathematics. There is some on combinatorics (good) and some geometry in the optional parts, but where is numerical mathematics? Linear algebra? Basics of statistics and calculus?
With the "big data"/AI crazes going on you will be dead in the water if you don't know at least the basics. Not to design the algorithms (that will be still way over your head) but to at least have a shot at understanding what you have to implement! Nobody is going to explain you how to multiply matrices or calculate a covariance there.
Stuff like geometry and linear algebra is absolutely essential also for people programming computer games, anything related to virtual/augmented reality or robotics.
Statistics is needed anywhere dealing with data but especially in AI, machine learning and computer vision.
And basics of calculus are pretty much everywhere.
So while the list is pretty useful as a reference, the title is seriously misleading.
- professorTuring 9y agoCompletely agree. This is "how to become a programmer with a general knowledge". Far, far away from a Computer Scientist. I can't see any of the "basics" stuff like calculus, algebra... BUT, it is truth that most of the enterprises are fine having a programmer rather than a Computer Scientist... Probably most of them can't even tell the difference.
- keithnz 9y agoto be fair, it says software engineer not computer scientist. But I don't really think it's a good basis for that. It really does look like a "cheat sheet for interviews"
- bri3d 9y agoMost enterprises would much _rather_ a programmer than a Computer Scientist. They, by and large, want and need implementation of either existing architectures (Programmers) or existing concepts applied to a take on an explored problem domain (Software Engineers). Research into net-new patterns (Computer Science) is often the domain of large corporate R+D departments and a few niche startups, not the bulk of industry.
- rhizome 9y agoI'd go so far as to say that almost zero jobs need Computer Scientists.
- btc_throughaway 9y agoCan you recommend a list of mathematics resources (paid or unpaid) that would serve as a full foundation?
- anonemouse145 9y agoRudimentary math is almost entirely sufficient. Meaning this should* have been learned early in life. I make web backends for e-commerce and I rarely do more than count and add. Example life skills: -Balancing a checkbook or verifying an account balance (addition including negatives, ex. e-commerce) -Tipping (be familiar enough with percentages to eatimate a few simple ones in your head) -Baking (fractions, multiplication/division) The only thing not covered is basic algebra, solve for X type stuff. If you can convert Celsius and Fahrenheit either way given one equation, you're golden. Most of don't need set theory or calculus. We need rudimentary math that should be in any 101 course. If you're going into some sort of engineering such as fluid dynamics or maybe deep financial territory like banking, then maybe you need some calculus. Otherwise, just be good at the 101 level.
- jlos 9y agoIn Canada, where the title engineer is a restricted term and thus the universities have common requirements, all engineers are expected to take - Calculus 1-3 - Linear algebra 1-2 (though condensed into one course) - Statistics - Differential Equations (including partial differential equations). I preferred reading the textbooks over going to class, so I can speak mostly from experience. - Stewart Calculus - Linear Algebra - Gilbert Strang - Paul's online math notes for Differential Equations (PDF is formatted better than the website) - Discrete Mathematics - Epp These works are meant to be read in their entirety. Now by reading these, I mean read them, work through the examples youself, and do most of the practice questions at the end of the chapter. I'd also recommend supplementing with Khan academy, which is often better than many university lectures. It's no small amount of reading, is genuinely difficult, and without difficult exams at the end of semester you may not retain the info. Also, consider the list a foundation for Mathematics in engineering less than something that will improve your work immediately. That said, totally doable if you move slowly, take the time to understand the material, and be okay with working through using formulas that don't make sense at first.
- eesmith 9y agoOne of the things I look for, in recommendations like this, is a mention of ethics. As an engineer we are obligated to understand the ethical consequences of our work, both in failure and success, and not do unethical work. This list of algorithm-heavy topics left out ethics, as well as other topics. Here are the curricula recommendations that the ACM has for a software engineer, extracted and reformatted from https://www.acm.org/binaries/content/assets/education/curricula-recommendations/cc2005-march06final.pdf https://www.acm.org/binaries/content/assets/education/curric... . The min/max expresses a weighting scheme for each of the knowledge areas min max Knowledge Area 5 5 Programming Fundamentals 1 3 Integrative Programming 3 4 Algorithms and Complexity 2 4 Computer Architecture and Organization 3 4 Operating Systems Principles & Design 2 4 Operating Systems Configuration & Use 2 4 Net Centric Principles and Design 2 3 Net Centric Use and configuration 0 3 Platform technologies 2 4 Theory of Programming Languages 3 5 Human-Computer Interaction 1 3 Graphics and Visualization 2 5 Information Management (DB) Theory 1 4 Information Management (DB) Practice 2 5 Legal / Professional / Ethics / Society 2 4 Information Systems Development 1 3 Analysis of Business Requirements 0 3 E-business 3 5 Analysis of Technical Requirements 2 5 Engineering Foundations for SW 2 3 Engineering Economics for SW 4 5 Software Modeling and Analysis 5 5 Software Design 4 5 Software Verification and Validation 2 4 Software Evolution (maintenance) 2 5 Software Process 2 4 Software Quality 2 3 Comp Systems Engineering 0 3 Digital logic 0 4 Embedded Systems 2 4 Distributed Systems 1 3 Security: issues and principles 1 3 Security: implementation and mgt 1 2 Systems administration 1 4 Systems integration 0 1 Digital media development 0 1 Technical support along with non-computing topics, which includes the mathematics you mentioned: min max Knowledge Area 2 4 Risk Management (Project, safety risk) 4 5 Project Management 0 2 Digital Signal Processing 0 1 VLSI design 3 5 Mathematical foundations 3 4 Interpersonal communication For example, the ACM explicitly recommends software engineers learn both "Analysis of Business Requirements" and "Analysis of Technical Requirements" which, unless I missed it, is only implicit in the list given here. (I have omitted areas with min=max=0 for software engineering. The original table also includes weights for related fields. Eg, "Functional Business Areas" is an important topic for those going into Information Systems, but not for software engineering, "Scientific computing (Numerical mthds)" is weighted 0/5 for CS, but 0/0 for software engineering, and "Electronics" is weighted 5/5 for a computer engineer but 0/0 for software engineering.)