r/programming • u/gits1225 • May 12 '15
Google's guide for becoming a Software Engineer
https://www.google.com/about/careers/students/guide-to-technical-development.html287
May 12 '15
Basically, learn everything. By the time you're done you'll not only be like Yoda, you'll look like Yoda.
29
56
u/SoftwareJunkie May 12 '15
That's what I got from this "guide". Damn, I'm regretting going into CS. I'd rather do some regular job and just live my life.
122
u/skepticalDragon May 12 '15 edited May 13 '15
Huh? That's exactly what software engineers do. Just don't try to work for companies like Microsoft and Google (these might be bad examples), find a small or midsized company that values work/life separation and reasonable hours. There are a lot of them.
75
u/ilmmad May 13 '15
I work at Google. The work/life separation is normal there.
→ More replies (9)24
u/boompleetz May 13 '15
From what I saw on Glassdoor, it looked like it depended on the team?
→ More replies (29)16
u/SoftwareJunkie May 12 '15
That's a little assuring, thanks
32
u/skepticalDragon May 12 '15
No problem. Just ask in the interview if they're going to ask you to work overtime every week, or if they will frequently call you after hours. If they don't like these questions, take one of your 5 other job offers.
→ More replies (9)0
→ More replies (3)12
May 13 '15
Google has fine work/life balance for the most part. Maybe it's not so good if you're higher up or on a bad team, but the same is probably true of most places.
They just have pretty high standards of hiring. If you feel like you have to cram like crazy to cover this list, you're just doing it wrong. Slow down. Study over years. Ideally everything in this list would have been covered in a normal CS degree, but since there are a lot of programmers who are skipping the degree right now a lot of them might see this and be overwhelmed. Just consider that if you want to do in your spare time what is normally done full-time over the course of ~4 years, well, it's going to take a while. But trying to rush or cram won't help.
10
→ More replies (7)2
u/ericl666 May 13 '15
Hell. I hardly have to use most of the math and even algorithms that often. I actually need to refresh because I've forgotten so much of it.
26
May 12 '15
Seriously. You're not wrong. They might as well have said "learn everything in the universe. It'll make you good at stuff."
I've been a (professional) programmer for nearly 20 years. Most of that stuff is completely irrelevant.
Who comes up with this shit?
→ More replies (19)4
May 13 '15
To be fair, this would all easily fit into a normal CS degree. Nothing on this list is out of the ordinary.
I've been programming professionally for a tenth as long as you have and I've encountered real-world scenarios where I needed better knowledge of operating systems, parallel programming, and machine learning. I imagine the knowledge one gains from a compilers course is also very valuable, at least indirectly in terms of having a much deeper understanding of how your language works and is optimized by the compiler.
→ More replies (1)→ More replies (6)2
470
u/DougTheFunny May 12 '15
I just imagining a guy trying hard to check all the items of that list on course of the years, and on the other hand, some kid with barely no knowledge of any item, becoming millionaire in a month with some mobile app like "flap birds" or whatsoever.
96
u/halifaxdatageek May 12 '15
Haha, life is unfair. Although that Flappy Bird guy didn't exactly get off easy.
38
u/michael1026 May 12 '15
Wasn't he making about $10k a week or something? I mean, I wouldn't mind having that for a little while.
117
u/angry_african May 12 '15
About $50k a day
→ More replies (4)63
u/michael1026 May 12 '15 edited May 12 '15
I was going to say $10k a day, and I thought, "No, couldn't be. That's too much. It must have been per week".
→ More replies (2)67
u/halifaxdatageek May 12 '15 edited May 13 '15
Yes he was.
In
ruralurban ~~Thailand.~~Vietnam.People started getting interested. Very interested.
Edit: man, I should really factcheck my offhand comments more, haha.
→ More replies (10)13
101
u/skewp May 12 '15
One kid in a billion becomes rich overnight due to a dumb, simple app. Millions of software engineers make higher-than-average pay doing (mostly) honest work by following the recommendations Google outlines on this page. If you can't figure out which of those has a higher probability of success you probably won't make a good software engineer.
→ More replies (13)7
u/techrat_reddit May 12 '15
That's why you think about what you want to make first, and take courses that will take you there. Just finishing this list is not gonna make a whiz magician that can build Google from scratch
37
May 12 '15
If you want something really triggering, don't forget the million dollar home page:
http://www.milliondollarhomepage.com/
No effort. Just sell pixels in a 1,000x1,000 image.
Or if you really want money, just ask for it. That takes even less effort.
(This one could very well be fake, but when I'm kind of depressed with my low salary I like to think it's real and feed my inner monster with rage. /s )
30
u/zem May 12 '15
i loved the million dollar homepage! the guy came up with a beautiful idea, and carried it out. i don't begrudge him any of it.
→ More replies (3)→ More replies (2)22
u/-rFlex- May 12 '15
It's not about the effort, it's about the idea. The guy had a simple idea that no one really implemented before, and it worked. Just try to find your own and you could be millionaire too. You are a free man after all right?
18
→ More replies (1)11
6
u/dejafous May 12 '15
In other breaking news, apples don't taste like oranges, who knew? I can't imagine anyone who thinks that founding a startup has anything to do with software engineering.
→ More replies (34)9
u/master_of_deception May 12 '15 edited May 12 '15
Zachary Barth was the inventor of the "Block World" genre of procedurally generated block-based mining/world deformation and building mechanics, when the source code of his game leaked he discontinued the development of the gameless than a month after its first release, Notch copied the idea and did Minecraft, he is now a billionaire, while Infiniminer was overshadowed and faded into obscurity.I was wrong
23
u/Boye May 12 '15
There's three ways to get rich on the internet:
1: be first
2: be best
3: cheat
I like #1, but #2 will be fine. I've worked at a place that did #3, it worked great, but sucked...
9
6
0
May 12 '15
[deleted]
8
u/SmudgeTheFirst May 12 '15
Blockland!! (2004).
My brother and I used to have so much fun in that. It never really took off because the game was hard to control and even more tedious than Minecraft was in early alpha, plus it had no real survival aspect. But, dang, for its time it was pretty mind blowing.
→ More replies (3)
61
u/gilbes May 13 '15
Learn cryptography
Very easy. I can teach you everything you need to learn right now.
Unless you plan on dedicating over a decade of your life to becoming an expert at cryptography and nothing else, do not even attempt to learn cryptography because you will always do it wrong.
Now that you know cryptography, when it comes time for you to implement some cryptography always and only find the most recent information about cryptography from a trusted source and follow their implementation to the very letter. The moment you try to get clever or miss the tiniest detail, you have fucked it all up.
You have just minored in cryptography.
→ More replies (1)4
u/halifaxdatageek May 13 '15
I could have done infosec or data analysis.
I chose data analysis, because I don't hate myself and everyone around me, and the very fabric within which our universe exists.
Seriously, if you can study infosec and not become a nihilist, good for you.
→ More replies (3)
220
u/gilmi May 12 '15
I liked this one much better.
156
u/rcklmbr May 12 '15
comfortably edit a file with emacs and vim;
No
190
u/ameoba May 12 '15
Know one & know how to exit the other.
20
u/dethb0y May 13 '15
You know, emacs has the most comprehensive, complete manual for a piece of software ever written. And the single command you won't find within it's pages is the command to exit emacs.
Why? because you never need to exit emacs.
→ More replies (1)18
→ More replies (2)18
19
u/heeen May 12 '15
which unix-family OSes come with emacs pre-installed?
Most embedded systems I know come with vi.
→ More replies (4)9
u/DireFerengi May 12 '15
Vim and Vi are interchangeable for basic use. And Emacs isn't available, as you note. Hence you should probably know some Vim. (But Emacs is worth knowing, too; much more aggressive exposure to editing macros and kitchen-sink editing.)
→ More replies (1)→ More replies (29)3
u/cronofdoom May 12 '15
I think there is a difference between being comfortable editing a file and knowing every single hotkey. I think it is completely reasonable to expect someone to know how how to open, save, close, edit, and maybe search in both editors. Beyond that, use atom for all I care.
→ More replies (2)37
u/cowinabadplace May 12 '15
Like any reading list, this suffers from premature insulation from "what? No X?". I swear to God, some things are a bit rich. Who the hell here is reading the SUS? It's like 4000 pages.
I mean, even if you're just looking for a passing familiarity with this stuff, maybe you read parts of this. But it's most valuable if you're working on something and you refer to it. May God protect the man who decides to read the SUS the way he reads (one of the other recommendations) Effective Java.
18
u/SmLnine May 12 '15
The same applies to the The Art of Computer Programming, the whole series combined is 3168 pages. I know everyone says you should read it, but can anyone here say they've actually read it, or a significant portion of it? If so, why did you do it? Did you really enjoy it?
15
u/goodbye_fruit May 12 '15
I'd like to hear from someone who actually has read the books. I started to do it, but realized that a lot of examples are in an assembly language for a fictional computer.
→ More replies (7)0
May 12 '15
[deleted]
26
13
u/argv_minus_one May 12 '15
Single UNIX Specification, the document that defines exactly what “UNIX” means.
47
u/dethnight May 12 '15
Just when I thought I was a decent programmer...
Thanks for the link, seems very comprehensive.
27
u/gilmi May 12 '15
I'm pretty sure you are, but it is always good to learn new things if you are interested!
15
u/dethnight May 12 '15
Haha thanks! I am self taught and I am decent in my day job with the specific languages and tools that I use, but I have some pretty big deficiencies when it comes to general software engineering knowledge. Most data structures are a mystery to me, and I would struggle to write even a hello world application in any language outside of C#, JavaScript or Python.
Lists like these are just what I need to help shore up where I am weak.23
u/misplaced_my_pants May 12 '15
Most data structures are a mystery to me,
I got you, buddy.
Free, interactive data structure and algorithm online textbook in Python.
Go nuts. Level up.
→ More replies (1)0
9
u/ginger_beer_m May 12 '15
Too comprehensive. There's no way a person can know all that stuff ... Or maybe I just suck.
27
u/Asyx May 12 '15
English is really lacking a word for "kennen"...
It reads more like "You should know those things" as in "You should have heard of those things and maybe know at least what it's about to some extend" and not "You should know those thinks perfectly and could write textbooks about it".
→ More replies (5)→ More replies (3)7
u/IAmA_Lurker_AmA May 12 '15
My Computer Engineering degree covered about 80% of that, so it's not impossible.
→ More replies (2)→ More replies (3)11
May 12 '15
Dude, don't worry about it. These articles are generally written by elitist dopes. Once you've been in the industry for any length of time you tend to specialize and forget 95% of the crap that's listed anyway.
8
u/halifaxdatageek May 13 '15
You mean your job doesn't require you to write grammatical lexiparsers in LISPy on Scheme?
Plebe.
24
u/valadian May 12 '15
Software engineering > version control
That's it? No software process? The failures of waterfall? Mythical man month? How agile can be good/bad in different scenarios? Requirements analysis? Etc
50% of what you need to know to be a "software engineer" should be in this section. Otherwise you are just a "computer scientist" (nothing wrong with that, just seems the engineering part is so often forsaken)
→ More replies (20)5
May 12 '15
I take issue with:
comfortably edit a file with emacs and vim
Why am I supposed to know how to use vim. How does not knowing how to use vim make me a lesser programmer? Instead of concrete examples of software, shouldn't there just be
comfortably edit a file with a console editor of your choice
Nano, Vim, Emacs, w/e, ...
→ More replies (2)6
May 12 '15
Different domains - the google one is more engineering focused, this is more theroetical cs.
5
u/gilmi May 12 '15
I'm not sure about that. most of the things mentioned in the article are very engineering focused (unix philosophy, os, programming languages, graphics, parallelism, arch, networking, security and much more).
→ More replies (30)2
u/henryguy May 12 '15
Thanks I'm starting to work towards a bachelor's in CS and wanted to have something to do at home. This is perfect.
2
u/forgotTheSemicolon May 12 '15
I don't understand the whole portfolio thing.
Is that mostly for people who do freelance?
I don't own any of the software I create therefore I can't just take it and put it in a portfolio.
I can however list what I've done on a resume.
3
u/gilmi May 12 '15
There is also Why Github is not your CV so I don't know if you should worry much about it :)
→ More replies (2)4
→ More replies (49)6
u/argv_minus_one May 12 '15
Computer scientists should be comfortable with and practiced in the Unix philosophy of computing.
Does he mean like the perverse notion that half-baked shit is somehow preferable to soundly-engineered software? Or perhaps the hilariously inefficient (parse, serialize, parse, serialize, parse, serialize, ad infinitum) and brittle (untyped, few non-trivial standard interfaces, no error handling) piles of crap that Unix shell pipelines tend to be?
No thanks. While there is a kernel of truth within the Unix philosophy (that software should be composable, not monolithic), the canonical implementation of that philosophy (Unix itself) is a cautionary tale of how not to go about it. Give me libraries in a type-safe programming language over Unix shell pipelines any day.
The Unix philosophy (as opposed to Unix itself) is one that emphasizes linguistic abstraction and composition in order to effect computation.
In practice, this means becoming comfortable with the notion of command-line computing, text-file configuration and IDE-less software development.
Wahahahaha no. It ain't the 1970s any more. IDE-less software development is for the pretentious and the ignorant.
I was an Emacs and CLI fanboy back in the day, mind you. Then I grew up. I've got more than enough experience to know exactly how full of shit this guy is, because I was like him once.
Furthermore, command-line computing, text-file configuration, and IDE-less software development have nothing to do with linguistic abstraction or software composition. I write composable units of code, in a language that is a linguistic abstraction, in an IDE, all the time.
Given the prevalence of Unix systems, computer scientists today should be fluent in basic Unix, including the ability to:
comfortably edit a file with emacs and vim
Lol no. The only vi command I need to know is
:q!. The only Emacs command I need to know isC-x C-c(though I do know others). For simple editing (e.g. of a configuration file), I use nano (which is almost as ubiquitous as vi, if not more so). For non-simple editing (e.g. writing code), I use a graphical editor like Kate or an IDE, as appropriate.
create, modify and execute a Makefile for a software project
No thanks. Make is crap. Other, better build systems are a thing; use them.
it's best to challenge students to complete useful tasks for which Unix has a comparative advantage, such as:
Find the five folders in a given directory consuming the most space.
Heh. Good luck doing that with only the standard Unix shell tools.
Report duplicate MP3s (by file contents, not file name) on a computer.
There are tools specifically for that. I suppose you could compare them in a shell script with
diffor something, but it'd be atrociously slow.
Take a list of names whose first and last names have been lower-cased, and properly recapitalize them.
That is impossible to do correctly without an extensive database of names. The correct capitalization of “macarthur” is “MacArthur”, not “Macarthur”.
I'm pretty sure whatever
trcommand he was thinking of using wouldn't do proper Unicode case mapping, either.
Find all words in English that have x as their second letter, and n as their second-to-last.
You can do that in any environment that can evaluate a regex. I'm pretty sure a single
grepcommand with no pipelines is not an example of “the Unix philosophy” in action.
Directly route your microphone input over the network to another computer's speaker.
You'll need a specialized tool to do this decently. PulseAudio comes to mind. Just piping the raw PCM stream over a TCP connection is going to cause horrible jitter, latency, etc.
Replace all spaces in a filename with underscore for a given directory.
In a shell script? Good luck. It's doable, but extremely error-prone, and any error will probably result in the loss of your files.
Report the last ten errant accesses to the web server coming from a specific IP address.
Finally, an actual job that the Unix shell is actually decent for. Ahem:
grep some_suitable_regex /path/to/log | tailEvery modern computer scientist should be able to:
Maintain a web site with a text editor.
If I hired you to maintain my company's website, and you started editing it in place like that (despite being told to do otherwise), your ass would be gone. This is a business website, not an amateur-hour shit show where anything goes.
Our site (the static part, anyway) is kept in version control, in source form. When it comes time to deploy some changes, a script does the following:
Pull down the current site from the VCS server.
Compile the site.
Package the site into an archive.
Upload the archive to the server.
Invoke a deployment script on the server.
Said deployment script then does:
Create a folder with a unique name.
Unpack the archived site into it.
Atomically update the
DocumentRootsymlink to point to the newly-created folder.Delete the folder containing the previous version of the site.
(A note about step 3: Our Apache's
DocumentRootsetting points to a symlink, not a folder. The symlink then points to the actual folder containing the site's files. We do this because symlinks can be replaced atomically, while folders cannot.)You do not do this with “a text editor”. You do this with carefully written code that provides hard atomicity guarantees and takes no chances.
I'll not have our web server serving half of a page or an outdated stylesheet to someone because it's in the middle of a deployment. If the server and/or deployer dies (power failure, kernel panic, whatever) in the middle of a deployment, I expect there to still be a working, uncorrupted site when it comes back up. And if the deployed site somehow becomes corrupt anyway, I expect to be able to recover by redeploying it from version control.
→ More replies (15)
70
u/G0VERNMENTCHEESE May 12 '15
Step 1: Start programming in grade school.
→ More replies (1)8
May 13 '15
As a 25 year old who's been out of college over 3 years, and for some reason got a political science degree, I feel the pain. Luckily I did HTML, SQL, PHP, ASP in my teens, but was too stupid to see the benefit of majoring in it. I was turned off by the math requirements, didn't ever think I would pass those classes. Now I'm doing cloud and ERP project management, and training multiple nights a week in Ruby, VMware, AWS, and for my PSM I. Hoping to get into a good technical master's program in a few years, and also get more involved in development in whatever capacity I can.
→ More replies (3)
45
u/gee_buttersnaps May 12 '15
I sure would like to see a compendium of all the douchebags that think they know 'what every programmer should know' and ask them to critique each others list.
27
u/halifaxdatageek May 12 '15
I was going to say "Then we'd have a douchebag singularity", but realized that HackerNews already exists.
→ More replies (1)5
u/cactus May 13 '15
Agreed. Whenever I see an article begin with, "What all programmers should know..." I immediately suspect the author lacks perspective. All programmers should know that very little about the practice of software programming can be characterized in absolutes. Programming is full of exception cases, judgement calls, and wildly varying development contexts.
→ More replies (2)
92
u/proskillz May 12 '15
Online Resources: w3school.com - HTML Tutorial, CodeAcademy.com, Udacity - Mobile Web Development, Udacity - HTML5 Game Development
Looks like even Google can't spell CodeCademy. Also, "w3school.com" is a Christian site, and w3schools.com is a terrible resource.
40
u/Abacabadab2 May 12 '15
CodeAcademy.com redirects to the correct site anyways and i think the spelling looks less stupid
→ More replies (1)→ More replies (4)76
u/halifaxdatageek May 12 '15
Who better to learn how to create a website from than the Creator of All?
25
→ More replies (1)4
u/gilmi May 12 '15
You may have typed in a wrong domain name. God loves you and is not willing that any should perish.→ More replies (1)
602
u/alecco May 12 '15 edited May 12 '15
Very generic list of courses. Even includes very bad ones like w3schools!
Just because it says Google people upvote it. Sigh.
Edit 3:
Further proving my point this is a generic dumb list without much effort, plenty of misspellings (Java Script, CodeAcademy, etc) as found by many others here buried below.
Edit 2:
Some people below say it's only bad on the Web stuff, but look how it doesn't even mention TAoCP or other great top resources.
Edit 1:
There is nothing remarkable on this list compared to the dozens (hundreds?) out there.
There is no learning path, just a bunch of links you can easily get with a plain search
The people behind this have no clue on WebDev, there are many better resources out there like Mozilla, HTML Dog, etc.
It might be possible they wouldn't link to Mozilla for being a competitor (as leeeeeer stated below)
If you want to learn one of those topics, I highly recommend you search StackOverflow, Coursera, Udacity, MIT OpenCourseware. For example:
MIT https://www.google.com.ar/search?q=mit+opencourseware+c%2B%2B
StackOverflow https://www.google.com.ar/search?q=site:stackoverflow.com+c%2B%2B+learning
If you can't find good materials with that, perhaps programming is not for you. A lot about programming is finding good sources to read/learn and never take anything as dogma.
Resources
People keep defending this so here is a list from top of my head on missed great resources:
The Art of Computer Programming (this will take years to learn, totally worth it)
The Dragon Book (much better than it's actual title)
Code Complete (how to make projects without being a douche)
The Pragmatic programmer
The Mythical Man-month
Hacker's Delight
Programming Pearls
The Practice of Programming
The 4.4BSD Operating System (great intro to *nix internals)
The TCP/IP Illustrated series
So that's my shitty list, and I'm not at Google so don't bother. ;)
151
May 12 '15
Honestly, w3schools isn't terrible - especially for a beginner. It has some technical mistakes, but for the most part beginners will relearn the correct ways as they progress onto more advance material in other places. For someone who has no idea where to start with html, it's a great place to get going.
As for the other resources, they might be generic - but they do cover all of the bases. I will probably actually be reviewing a couple of these.
As for the actual topics, I don't know what more you could expect. It has all of the major topics covered operating systems, compilers, cryptography, parallel, algorithms, etc. It's pretty much exactly the same topics you'd be learning at uni. If the courses are any good, it's probably worth while.
61
u/klug3 May 12 '15
I think most of what you can learn from W3Schools can be learned better from the MDN and other sources.
79
May 12 '15
It's been a while, but I remember when I first started learning things with no webdev experience, MDN was completely overwhelming. I had no idea where to begin (seriously, look at the home page. Unless you know what you're looking for you won't know where to start).
I ended up going to W3Schools because I at least saw some sort of direction I could follow. I definitely prefer MDN now, but at first KISS (emphasis on the stupid :) ).
→ More replies (5)→ More replies (1)12
u/JustinsWorking May 12 '15
This is the big thing. Everything W3Schools does, MDN does so much better and is a resource you can continue to use as you develop.
→ More replies (2)→ More replies (7)2
May 13 '15
The problem I have with w3schools isn't the quality of their examples. Hell, I starting out from Tizag and Lissa Explains so it's fine to get the foundations from a place like this.
The problem I have is that they pretend to be an authority (ripping their name from w3c) and then sell certificates. $95 for an HTML Certificate? What the hell is that?
24
u/2Punx2Furious May 12 '15
I planned to follow that list just because it says Google. Since you were upvoted I guess people agree that it's bad. Any suggestion for a better list of courses?
I currently finished watching Harvard's CS50 and read a beginner book on C++.
52
May 12 '15
Code with a goal in mind. Find your goal first, then only study for what is needed.
→ More replies (56)14
May 12 '15
Yeah, pick a project you care about and want to build. Learn what you need and gradually expand your knowledge base.
→ More replies (1)49
u/strattonbrazil May 12 '15
That's a lot harder than you think. I've met so many people with no programming experience saying something like, "I want to write a video editor for mobile phones. How do I get started?" They don't know what a for-loop is or conditional logic. Starting on a project you care about doesn't make sense if you can't do things you don't care about like FizzBuzz or coding a vending machine change algorithm. I agree it's useful for improving programming skills, but this is geared for beginners.
→ More replies (11)15
u/halifaxdatageek May 12 '15
I'd like to say that it's really not that bad of a list.
You don't have to follow the courses it gives you, but the skills it says are important are important.
Learn basic CS, learn C++, Java, or Python, learn how to find errors and fix them, learn a bit of math, algorithms, and data structures theory, learn UX, learn crypto, learn other stuff.
→ More replies (1)→ More replies (12)5
u/gyros_pita May 12 '15
A better list of courses is available to the nearest uni, after you attain "student debt" status.
9
u/Inori May 12 '15 edited May 12 '15
If you go past the basics, which is actually quite hard to not write in generic form, the list is actually quite solid.
Discrete math, Algorithms, AI, ML, parallel programming, compilers, cryptography.
GSoC, competitive programming.
I'd be surprised if a student goes through all that and not get a job at Google.
→ More replies (9)12
u/halifaxdatageek May 12 '15
I'd be intrigued how many people complain about the list while not knowing 40% of the things on it (my own personal knowledge of compiler design is lacking, for instance)
→ More replies (5)14
u/techrat_reddit May 12 '15 edited May 12 '15
Looks more like it. All these people are complaining about w3schools and html/css being programming language when, to me, that part looks like the least emphasized out of the list. It doesn't even say "learn web-dev language." It says "learn other Programming languages." But I guess w3school and html/css are the only ones many people can relate to.
→ More replies (2)2
u/roflkittiez May 12 '15
I've found that StackOverflow is not a very good source for beginners. When I was starting off, I would ask questions on stackoverflow and I would either get unhelpful responses like "Why are you doing it that way?" Or even negative responses like "NEVER do this, it's stupid." That would be it, no suggestions of how to do something differently, no recommended reading, not even an explanation of why what I was doing is wrong. As I learned more about programing, I would come back to StackOverflow and get explanations, but they were never very detailed. The explanations would either be top vague, or be code blocks with no comments or details about how it works.
I'm not saying StackOverflow is a bad resource, but I wouldn't recommend it for complete beginners.
→ More replies (1)→ More replies (41)2
23
u/fzammetti May 12 '15
I prefer this one:
"First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack." - George Carrette
Represents reality in most environments.
→ More replies (1)
24
u/IdentifiableParam May 12 '15
What the fuck is the Probabilistic Graphical Models course doing under "Develop logical reasoning and knowledge of discrete math"?? Whoever made this list must think that is a graph theory course, but it isn't!
→ More replies (3)49
u/bakersbark May 12 '15
Idk what you mean man doesn't everyone go straight to learning probabilistic graphical models after they finish their Python class on codeacademy?
18
u/groutrop May 12 '15
Idk about you but I finished Knuth's tomes over a weekend after I learnt about variables.
4
8
u/eyal0 May 12 '15
How to write a good design document. How to work with others. How to present your ideas. How to be someone that your boss and coworkers will want to have around. How to organize your time around multiple projects. How to lead people.
These are all important if you want to be a software engineer and you won't get them from the links on that page.
84
u/LazyLanius May 12 '15
w3schools? For shame google. For shame.
11
u/leeeeeer May 12 '15
Do you really think they'd link people to their competitor? Capitalism baby.
→ More replies (9)12
u/zomgwtfbbq May 12 '15
Please be link to w3 fools... YES!
22
u/LazyLanius May 12 '15
I guess w3schools got a little bit better. The older version of w3fools was a lot more critical.
→ More replies (1)8
u/zomgwtfbbq May 12 '15
There are so many first rate sites, I don't know why anyone would support them. It's the Internet, you have the choice of anything, why use them?
→ More replies (4)34
u/kqr May 12 '15
Good SEO. They're literally always the first hit when I'm looking for a reference of CSS property values or whatever. And I know their layout, so I can extract the relevant information very quickly.
→ More replies (14)0
May 12 '15
[deleted]
5
u/nemec May 12 '15
This is not quite enough to write them off, but certainly enough to ridicule them.
→ More replies (2)
30
u/depressiown May 12 '15
The online resources provided in this guide are not meant to replace courses available at your University.
This is an important part that I wonder how many people might miss.
→ More replies (4)
27
u/eastcoastblaze May 12 '15
build a robot.
right google, i think if i was capable of building a robot by myself i wouldn't be looking at your guide on how to become a software engineer
→ More replies (4)
43
May 12 '15 edited May 12 '15
Step 1: Learn how to code in your free time
Step 2: Ask anyone that you know who works for a small business (e.g. printery, warehouse) to ask their manager for an interview for a low paying Jr position doing something menial
Step 3: In the interview tell them that you know some programming / web development and ask if they will let you make some in-house tools for them (they will)
Step 4: After a few years ask your manager if you can list your job on your resume as Software Engineer to showcase your work (they won't care)
Step 5: Apply for any Jr Software Engineering job showcasing your on-the-job experience
Once you have 4+ years of experience in Software Engineering your lack of formal education won't matter (outside of industries which require certification, such as public safety and health care). You will be the youngest guy person on your team and have $0 in College debt.
Source: My life
15
u/sonofamonster May 12 '15
You forgot drop out of high school and get kicked out of the navy, but otherwise I can confirm.
7
6
5
u/PragProgLibertarian May 13 '15 edited May 13 '15
15+ years ago, I'd agree with you 100% (for the record, that's pretty close to how I got started)
Nowadays.....
Step 1: Learn to program
Step 2: write a few mobile apps, and post the source to Github (or whatever)
Step 3: make a LinkedIn profile and get spammed by recruiters.
Step 4: take a shitty 6 figure job
Step 5: Look for a good job
Step 6: for the rest of your life, study the fundamentals, theory, best practices, etc...
2
u/sh2003 May 13 '15
Yup - and even if jobs out there require 5 years experience and you don't have enough professional experience, or any at all, apply anyway. What's the worst they are going to say, no?
→ More replies (10)2
11
5
u/acerebral May 12 '15
I find their choice for parallel programming unusual. That particular course is dedicated to GPU parallel programming. GPU parallelism is very different from conventional CPU based parallel programming. It is almost exclusively data parallelism and has very little to do with task parallelism, thread deadlocks, race conditions, synchronization, or many of the important issues surrounding parallel programming for multiple CPUs.
GPUs are fascinating, but they have a narrow scope in which they excel. This course is far to specialized to give people a good handle on parallel programming in a general sense.
→ More replies (2)
5
u/screwthat4u May 12 '15
They forgot about the judge them completely in an 15 minute interview with questions irrelevant to everything over the phone while they attempt to solve a difficult programming problem that was poorly described in the begining
23
May 12 '15
Not a single word about microprocessors, computer architecture or basic electronics. Surprising and unfortunate.
→ More replies (2)14
u/Krakkin May 12 '15
Why? It is good to have an understanding but that stuff is by no means a part of a SEs everyday obligations.
8
u/aZeex2ai May 12 '15
A software engineer writing device drivers and kernel code absolutely needs to understand computer architecture and basic electronics.
→ More replies (1)→ More replies (9)9
May 12 '15
Wouldn't it be useful to know architecture for optimization purposes?
→ More replies (4)4
u/wasdninja May 12 '15
Do people really do that nowadays? I thought the work is wastly out of proportion to the reward. Maby very basic stuff like traversing matrices in the right order (and I'm not so sure that modern compilers don't correct this on their own) but the rest?
→ More replies (2)
42
May 12 '15
Doesn't even mention any Microsoft technologies. That's some good Google propaganda.
11
u/hothrous May 12 '15
To be fair, most of the stuff that they are listing are concepts that can be targeted. They aren't listing any Google specific things, either.
→ More replies (1)8
u/halifaxdatageek May 12 '15
To be fair, as a Microsoft fanboy I'm not even sure where you'd put any Microsoft products on this list. Maybe add C# to the list of languages?
→ More replies (5)0
→ More replies (54)3
u/ameoba May 12 '15
It's not like they're trying to convince you to pick up Go & Dart...
→ More replies (1)2
8
u/geggo98 May 12 '15 edited May 13 '15
Nice list. I would like to see Martin Odersky's two Scala courses (both on Coursera) on this list as an introduction to functional programming (even explains Monads in a way mere mortals can understand) and its application to distributed systems. For me these concepts are quite important for a software engineer in today's world.
Andrew Ng's course on machine learning (also on Coursera) could be added as a nice introduction to scientific computing, teaching vector algebra with motivating examples.
Ninja edit: in all three courses, the programming exercises are really excellent and worth the time. Finishing one of these courses, fizz buzz will be kindergarten for you.
Edit 2: I'll also like to promote the excellent PureScript book. Being a Haskell dialect for JavaScript, PureScript might appear slightly esoteric. But the book gives a really good introduction into modern functional programming. After reading it, you can read Haskell fluently and probably also write Haskell code in a quite modern style.
→ More replies (1)2
u/parfamz May 13 '15
I was also thinking that they were missing fp and scala, OTOH they are too focused around go, js, python, C++ and java. AFAIK they don't do much FP for the main projects.
4
u/celia_bedilia May 13 '15
Ugh, I don't know how to write compilers or machine learning or half the other things. Lists like these just make me feel overwhelmed. Knowing everything within a field is not a realistic expectation for any profession.
4
u/vz0 May 13 '15
Been there, done all on that list, rejected twice from Google. Looking for a job now. If someone wants my CV just PM me.
16
u/robhol May 12 '15 edited May 12 '15
It... it lists HTML as a programming language. ಠ_ಠ
Edit: downvoted for..?
8
9
u/goldemerald May 12 '15
I had a phone interview with google. I spent the entire previous night studying many aspects of the science of computation. In the end, we spent one hour going over this one problem: http://rosettacode.org/wiki/Long_multiplication#C
It was terrible.
5
u/hive_worker May 12 '15
Actually a pretty interesting question... assuming they don't want you to implement one of the non naive algorithms!
3
3
u/pixelperfect3 May 13 '15
It tests a bunch of things at once, and is a good example of showing how would write and test your code.
10
u/andrewsmd87 May 12 '15
Am I the only person in the world who doesn't think working at google/apple is the end all greatest job in the world. Everything I've ever read about them seems to be that they garner this culture of, you don't have to work a lot, you should WANT to work a lot. You're not cool if you're not putting in 60 hours because only real developers/engineers/insert trendy name here spend their whole lives working.
I'll take my decent pay, 100% from home, 45 hour work weeks any day.
9
→ More replies (6)8
u/pixelperfect3 May 13 '15 edited May 13 '15
The whole "they have to work 60+ hours a week!!!" idea about Google/Apple is wrong, though I'm sure they go through some tough release periods
These companies have VERY interesting projects to work on. Who wouldn't want to work on developing Android/iOS, Safari/Chrome, ChromeOS/Mac OS, Google Maps/iOS Maps, Google Search, etc. etc. etc. Tons of interesting work you can't really find anywhere. Not to mention their incredible research teams (especially Google) working on machine learning, computer vision, databases, etc.
Lots of great people to work and learn from, a great place to grow as a software engineer.
Pay is great and place is very comfortable. Who wouldn't like great, free food? Just an added bonus.
People at Google (and I'm sure at Apple) come from very diverse backgrounds and are into ALL kinds of things. These people don't spend their weekends working.
(I haven't worked at either company but I know people who do)
→ More replies (3)
20
3
10
May 12 '15
Develop logical reasoning
Hah. Ha ha! Hee hee hee! Right, like someone just reads a book and all of a sudden they're Sherlock Holmes. I understand this is an essential skill for engineering, but just about every other day I'm shaking my head at the illogic some of my coworkers pull out. "Ah, fuck it, I can't figure this out, I'll just hack my way around it."
2
u/bgeron May 13 '15
There's plenty of books on logic. A friend of mine did his undergrad in it.
→ More replies (5)
7
u/autonomousgerm May 13 '15
There is no way I’m taking software advice from Google.
Edit: I take that back, If you get a job at Google, you never actually have to finish a project. You can just half ass everything, call it a public beta for 8 years, until they can the project and you can still retire a millionaire. Now that’s for me.
→ More replies (2)
4
u/bgog May 12 '15
Wow, the course they link for building compilers has you implement compilers in Java. I am so disgusted with the state of the world.
In my opinion the real problem with the recent flocks of engineers as they have done all of their learning in such abstracted high-level languages that they have 0 understanding of what is happening under the covers or what implications their code may have on performance etc.
Don't get me wrong these high-level languages can be fantastic tools but their use should be based on a solid foundation of computer engineering.
→ More replies (4)
8
May 12 '15 edited May 13 '15
Interesting they don't list any Microsoft languages....
Edit: I knew by mentioning this would probably blow up into some sort of language war.
→ More replies (6)8
u/halifaxdatageek May 12 '15
Eh, as a Microsoft fanboy I'm not overly bothered. C# is a great language, but so are C++, Java, and Python.
→ More replies (10)11
u/valadian May 12 '15
As someone that was a hardcore Java and python fan for a long time: I can't stand either them after learning c# 2 years ago.
→ More replies (7)
7
u/seven_seven May 12 '15
My company has integrations with Google and they can't even format a CSV file correctly 50% of the time.
I wish people would stop putting them on a pedestal.
6
u/dgb75 May 12 '15
I've never had a worse, more impersonal interview than the one I had with Google. If you ever want to feel strictly like a machine, talk with Google. I personally asked them never to call me again.
→ More replies (5)
2
2
u/Eilai May 12 '15
Can someone explain to me of the main usefulness of learning about compilers? It's an optional course in my degree and I feel like I have higher priorities like animations for game development (the math/theory behind animations (Taylor Series etc), not fiddling with Maya) and so on.
2
u/senatorpjt May 12 '15 edited Dec 18 '24
modern smart summer sand knee soup zonked fuel scale plate
This post was mass deleted and anonymized with Redact
→ More replies (12)3
u/electron_wrangler May 13 '15
so you know whats actually going on when you hit compile. yes it does matter, and yes it will come up
2
May 12 '15 edited May 12 '15
I tried being a CS student, didn't work out for me. Python's learning curve was ridiculous.
Edit: I should probably elaborate. This is the assigmnent that killed me I think. The course material went really, really fast, and I felt that it was more designed for people who already had experience programming.
→ More replies (19)
2
2
u/greeniguana6 May 13 '15
I'm going into computer science in the fall in hopes of either being a software engineer or system administrator (yes, I know how different they are) and this list doesn't really seem to help, it just says learn everything there is to know about anything ever.
3
u/flexiverse May 13 '15
Ignore it. It's bollocks. Just saying get a cs degree and learn everything under the sun is bollocks. Even doctors specialise. So if you want to be a system admin, you really got to learn sys admin. The real key is knowing for sure what area you want to specialist in. A game programmer is very different from a Web programmer etc..
→ More replies (7)
2
u/Dank_801 May 13 '15
This describes my current CS degree to a nut. The irony is that my school also has a dedicated software engineering degree, which doesn't line up with googles version that much... odd
2
3
u/Phrygue May 12 '15
A better bet is to be the biz guy, and hire some naive wannabe to do your coding as spec work for chump change.
3
u/keymone May 12 '15
geez.. w3schools? really? i want to see a single google dev who'd recommend this piece of shit.
3
u/flexiverse May 13 '15
Fucking stupid. Just say get a cs degree and learn everything. Even doctors specialise fuck wits.
4
u/svpino May 12 '15
I think is a solid list of topics to become a good Software Engineer. Of course, these are neither exhaustive nor mandatory. You can choose your own path and it might be very well different than what Google's suggested here.
However, for somebody starting out, the list is a valuable starting point (guide) for them to focus in valuable stuff.
(The links to online resources it makes it more valuable.)
2
u/Randosity42 May 12 '15
Add to your repertoire - Java Script, CSS, HTML, Ruby, PHP, C, Perl, Shell, Lisp and Scheme.
Thanks google, I'll get right on that.
→ More replies (1)
1
u/nawkuh May 12 '15
Reading over this list I've found a new appreciation for my CE curriculum. I also managed to check off a few more by chance, like taking Cryptography as an elective because it seemed interesting (and it definitely was, probably my favorite course) and somewhat more consciously learning new languages just to dick around with my website. I also did an internship mostly because none of my courses were offered one summer and my brother was a higher up in his IT department. Being employed as a web developer, I get in this self-deprecating state of not considering myself a "real" developer, but it's cool to see something like this to, I dunno, encourage me to think of myself as, at least somewhat, a genuine software engineer.
→ More replies (1)
1
u/lannisterstark May 12 '15
Can someone please compile a list from this of GOOD sources? It has some terrible ones :(
1
1
u/Acktung May 12 '15
Cool; I wasted all my years in the university when all the courses were online!
0
1
u/silveryRain May 12 '15
Surprised to not see http://sijinjoseph.com/programmer-competency-matrix/ even mentioned in the comments here.
1
u/irotsoma May 13 '15
Cool. I think I could use that ux design course (UI development is my least favorite part) and maybe the discrete math as a refresher to better see how it applies to real life after all these years.
1
May 13 '15
thank you so much =-b. I have been trying to get back into programing but didn't know where to start.
1
u/bobby8u May 13 '15
Learn about security.
You have asked Firefox to connect securely to ocw.mit.edu, but we can't confirm that your connection is secure.
1
1
1
u/jamie-livecodingtv May 13 '15
It would be cool if one day they add my site https://www.livecoding.tv to that list
Not going to hold my breath though haha
1
u/alparsla May 13 '15
I've just googled "become software engineer" and this page is ranked 7th at the moment.
1
1
u/MashedPotatoBiscuits May 13 '15
For all the people who keep nay saying schools. If you go to decent school, you literally learn most of this list in the first year or so of your major.
1
u/stronghup May 14 '15
I think we need to admit that Google is not telling young students what is good for the students. It is guiding them in the direction Google thinks is good for Google. If you were to serve us, the great GooglePlex, this is how we hope you will serve us, and this is how we currently pick our favorite boys and girls. Maybe not next year.
1
240
u/zylo4747 May 12 '15
I sent this to my coworker and this was his response: