24 ms·
Guide for Technical Development
- keerthiko 11y agoHmm, I was a little disappointed with the list for a few reasons - Mostly just stuff that you learn along the way if you remotely like coding and go to an engineering school - Doesn't talk about what to NOT spend/waste too much time on in favour of the listed things - Doesn't list getting familiar with any version control systems. Obtuse as they may be, it's a must-learn skill for a software developer before being able to contribute to production code.
- robmcm 11y agoI would agree with VCS, preferably distributed and centralised. It does mention GitHub and Kiln (Mercurial) "Work on a small piece of a large system (codebase), read and understand existing code, track down documentation, and debug things. Notes: Github is a great way to read other people’s code or contribute to a project. Online Resources: Github, Kiln"
- edpichler 11y agoSorry for disagreeing a little bit, but being familiar with a tool like a version control system is the least of the problems. It's important, but not that much to be a item on this list.
- deleted 11y ago[deleted]
- gabipurcaru 11y agoYou seem to be contradicting yourself -- "just stuff that you learn along the way" vs "Doesn't list getting familiar with any version control systems". Aren't version control systems "stuff that you learn along the way" in your opinion? IMO, any resource like the one in the OP is going to get bashed ("not the way I would learn stuff"). Might as well learn something from it.
- exelius 11y agoNo, you pretty much don't need to bother with version control systems unless you're writing code on a team with others. And even then, students will likely never deal with any of the complexities that arise in the real world like branch merges, continuous integration, etc. In general, school teaches you the content without the tradecraft. You'll need both to be a "rockstar" developer, and I don't see how you could ever get the tradecraft without working in the industry.
- iovar 11y ago>> No, you pretty much don't need to bother with version control systems unless you're writing code on a team with others. If you are writing hello-world, maybe you don't need a VCS. Anything bigger than that can benefit from using one.
- crpatino 11y agoI have a pretty clear recollection of having heard about VCS in an undergraduate class, but presented in the most boring possible way, so I learned whatever I needed to regurgitate for the exam and moving one. A few years later, I found myself working in the industry and using a real VCS (Microsoft's dont' recall the name), and realizing this was the same thing I have being doing lamely for the last two years with daily zip files and lots of notes on the README.txt for each project.
- ska 11y ago> No, you pretty much don't need to bother with version control systems unless you're writing code on a team with others. You may not "need" to, but almost any individual project will benefit from it, also.
- exelius 11y agoRight, but if you've never used one, you don't know what you're missing. The default of coding without one works just fine for most school projects.
- allworknoplay 11y agoI don't agree at all. First, although it doesn't state it, it feels to me (and was confirmed by a googler in a separate thread) like this is meant for university students, for whom there is no "along the way" -- just academic CS courses. Second, they did bring up version control: "Work on a small piece of a large system (codebase), read and understand existing code, track down documentation, and debug things. Notes: Github is a great way to read other people’s code or contribute to a project. Online Resources: Github, Kiln"
- sanxiyn 11y agoI second the recommendation of Udacity's Software Testing course and Software Debugging course. Software Testing is taught by the author of csmith, and Software Debugging is taught by the author of delta. I feel that most CS curriculums could be improved by teaching more of testing and debugging. Do you know why it is not done?
- S4M 11y ago> I feel that most CS curriculums could be improved by teaching more of testing and debugging. Do you know why it is not done? I always thought this kind of skills was learned best through experience, by writing buggy code first, then fixing the bugs, then realizing that some testing could have helped to find the bug much earlier on...
- buttproblem 11y agotesting seems to be somewhat of a niche field. Using manual unit testing and random testing gets good results and seems to be the standard. But, you certainly could not devote an entire semester course on them. Beyond that, more advanced program analysis techniques, such as model checking and abstract interpretation, use some tricky math and don't seem to be widely used outside of some niche fields (critical software). Testing in VLSI design seems much more commonplace (people usually attribute this to the Intel bug). I don't know how much hardware design is done in a typical CS degree.
- sukilot 11y agoBecause it is a practical skill and hifalutin schools prefer theory and arcana.
- djent 11y agoSoftware Testing is taught at the college I attend.
- ramisama 11y agoI wonder why Go is not in the list of recommended languages
- longlivegnu 11y agoMaybe a lack of resources out there or Google thinks if you learn a more generic language you will mold easier
- ctvo 11y agoMaybe they're a large company and Go is a system's language used by a subset of the company. And maybe it's not important to learn for general technical development with no specific problem to solve.
- sukilot 11y agoGo is only recently popular, so very few past successful candidates had Go experience, so recruiters wouldn't notice it.
- paxtonab 11y agoIt's nice to see a curriculum that hand picks courses from a few different MOOCs and other relevant resources - that has definitely been a weak point of MOOCs as most of them don't have enough depth/breadth on their own for you to learn all of these things. I also think this is a great point: "Work on project outside of the classroom. Notes: Create and maintain a website, build your own server, or build a robot."
- escherize 11y agoI realize it's not a guide for the exact same thing, but How To Become A Hacker[1] has many things to say about leveling up. The 'hacker attitude' is especially well summed up, imo. [1] http://www.catb.org/~esr/faqs/hacker-howto.html http://www.catb.org/~esr/faqs/hacker-howto.html
- brunkotj 11y agoThis giude by Peter Norvig also has a similar road map ... http://norvig.com/21-days.html http://norvig.com/21-days.html
- brlewis 11y agoI wonder who at Google wrote this. HTML is listed as a programming language, and JavaScript is written as two words.
- fecak 11y agoI was thinking the same thing. This is sloppy writing. It reads as though it was written by someone unfamiliar with the content, and possibly translated from another language. Some of the grammar is a bit off from what you'd expect from an official release of some kind from Google. The capitalization of the word "university", and missing the capital H in GitHub. The "Artificial Intelligence" bullet has a formatting error. Missing articles ("work on project"). Not to mention it is vague. The "Learn other programming languages" bullet lists several options, but doesn't say anything about how unrealistic it might be to try and learn all of those languages (it says "and" instead of "or")
- drinchev 11y agoThese examples on their own discredit the post so much that it's a shame it has "google.com" as a domain of origin.
- diminoten 11y agoHowso? In what way do a few grammar/typo level errors make this a blight upon the nation that is Google?
- TheBeardKing 11y agoI don't know, I don't view Google as having the same level of perfection as, say, Apple. I know when I use Google products, almost infinitely in beta, there's going to be some things lacking and unpolished. Helpful yet unfinished, you take what you get.
- fecak 11y agoPerfection is one thing. But this is a page on their website trying to help them recruit for engineers? Shouldn't that have a bit of a higher standard?
- drinchev 11y agoFor anyone reading this. I strongly recommend to find a better resource than w3school, suggested by Google. The link is even broken, but this is a tiny detail. W3School have bad reputation [1] and is considered bad. [1] http://www.w3fools.com/ http://www.w3fools.com/
- philh 11y agoThat site doesn't say what's wrong with W3Schools, and it does say "when you're ready to level up, move on" which suggests that it's a reasonable resource for beginners to use.
- drinchev 11y agoFor me at least. It's simply incomplete list of popular keywords with some explaination. I can never use it as a full reference. There are [1] many [2] posts [3] suggesting what is bad inside. 1: http://meta.stackoverflow.com/questions/280478/why-not-w3schools-com http://meta.stackoverflow.com/questions/280478/why-not-w3sch... 2: http://meta.stackexchange.com/questions/87678/discouraging-w3schools-as-a-resource http://meta.stackexchange.com/questions/87678/discouraging-w... 3: http://www.codecademy.com/forum_questions/4fd1d78b7e79680003012b95 http://www.codecademy.com/forum_questions/4fd1d78b7e79680003...
- edgarvaldes 11y agoI'm really curious. What is bad with W3Schools? From those 3 links you posted, the only useful criticism says "they used to be notorious for serving outdated, or outright bad information." I don't see any example.
- afarrell 11y agoFor example: https://developer.mozilla.org/en-US/Learn/HTML https://developer.mozilla.org/en-US/Learn/HTML But really, if you want to learn html+CSS, you need to spend a bunch of time just making layouts if you want to get a mental model into your head. It is just too finicky to reason about otherwise
- theaccordance 11y agoGrammar and spelling aside, this is a good reference for those Ask HN "How do I get an internship/first job" posts.
- hnisdumb 11y agoThis has to be a googler trolling the likes of HN and places it knows will be nerdtard-raged by this posting.
- randomsearch 11y agoCould you be more constructive, and suggest what is missing or what shouldn't be on the list, please?
- mauricemir 11y agoHPC, Cluster, Computing, Assembler, some exposure to PIC or Amtel - plus CCNA level in networking. Oh and Know how to use a soldering Iron :-)
- mauricemir 11y agoOr getting copy editing done via crowd sourceing
- geekrax 11y agoEven Google knows that it's called "Javascript", not "Java Script": http://i.imgur.com/kEpux5f.jpg http://i.imgur.com/kEpux5f.jpg
- melling 11y agoUX Design is just one mobile Android course. https://www.udacity.com/course/ud849 https://www.udacity.com/course/ud849 Design has become so important that it would be nice to see a lot more resources. Learning to program is relatively easy these days because of the large number of resources. Design is still a dark art.
- kornakiewicz 11y agoI bet that if this list would be published on other domain rather than G, it would be not even taken serious.
- auvi 11y agoLisp and Scheme? Scheme is a Lisp. I think they wanted to say Common Lisp and Scheme.
- randomsearch 11y agoLots of criticism here, but very little of it constructive. Please could those people criticising the list explain exactly what is missing, or what should not be on the list?
- fecak 11y agoRegardless of what should or should not be on this guide, it's on Google's Career pages and is being served up to students interested in a career at one of the most admired employers in the world. Not only is it on the career section, it's on a section specifically targeting software engineers, which are considered a key component to Google's success. And the page is incredibly sloppy, both to those in the industry and probably many who don't even code but are in the industry (recruiters, non-technical hiring managers, etc.).
- mauricemir 11y agoGoogle need to think about this from a "Brand" perspective. Likewise some of Googles published API's are "in need of improvement" - which is polite civil service speak for your on a PIP
- sukilot 11y agoThis doc is exactly how recruiters and managers write. It is written by recruiters.
- Iftheshoefits 11y agoThe first sentence in the article encapsulates one of the biggest problems in this industry. It may apply to very specific roles within certain companies, or to specific subdisciplines, but in general the statement is little more than an unsupported assertion. It is very popular in a population heavily weighted by CS graduates, but popularity doesn't imply correctness. As a thesis statement it is wildly out of sync with all but a few of the bullet items, most of which have almost no relation to "CS fundamentals". Working on projects outside of class/work is broadly applicable to any field, as is contributing to large projects as part of a team or group; neither of these requires "CS fundamentals." OO programming and learning specific languages are likewise disconnected. Some of the points aren't bad with respect to being required in order to be a good software engineer, but even those are too scant on detail (even for a bullet list). Most of the "learn about" points are vague. In particular, as an example, the point about DS/algorithms is awful. What does "learn about" mean? Satellite engineers "learn about" materials, orbital mechanics, radiation and E&M, but they aren't in general expected to know the fundamentals (as a physicist would understand the term) of the theories of particle physics or gravitation for example. The bullet points read like a survey of random computing related topics. There is no focus or cohesion connecting them to being a good software engineer. It reads like somebody's random meanderings when contemplating something they might find interesting within the field of computing. It's not a guide; it's a disconnected hodgepodge. Remove everything that isn't related to being a good engineer (that would be almost all the points about sub-discipline-specific items, like machine learning), elaborate on the DS/Algorithms points, and provide something in the guide to actually support the opening statement (good luck). That specific enough for you?
- agounaris 11y agoLearn UX, AI, Cryptography, parallel programming, compilers, maths... lol don't let those guys/girls or HR write those guides they put all the keywords in there
- hanief 11y agoI compiled a list of online courses on Computer Science and Electrical Engineering the other day. The curriculum is based on my old CS college syllabus. Maybe it can be useful for students. Feel free to add something on the comment. https://docs.google.com/spreadsheets/d/1oZ6eY7WqVNGgyRSF9F8Lqf4vCGWaHcWYLGgjfmWj3PU https://docs.google.com/spreadsheets/d/1oZ6eY7WqVNGgyRSF9F8L...
- seasoup 11y agoThe message: You don't have to learn much to be a software engineer just master the discrete fields of object oriented programming, web development, ux design, artificial intelligence, building compilers, and cryptography. If you master one of these fields, you'll be doing well. I agree on taking an intro to each of these, but only to figure out which one you want to specialize in later on and because it's nice to know something about other related fields. You won't master all of these in your career, so don't let the list intimidate you.
- gphil 11y agoI read your comment first, then I clicked through to see if they really suggesting "mastering" all of these fields (which is nigh impossible as you suggest.) They just say to "learn" them, and if by that they mean "take an intro-level college course on the topic" then I think it's pretty reasonable. It's my opinion that people should wait until after undergrad to specialize (in industry or academia.)
- javajosh 11y agoThe author used the phrase "Develop strong understanding in.." in two places, "Algorithms and Data Structures" and "Operating Systems". The other fields are predicated by "Learn..", which I take to be a weaker recommendation.
- 64bit_snack 11y agoWhat is Google even trying to say with this? You don't need a CS degree because you can learn everything for free on the internet?
- famousactress 11y agoI don't know if that's what they're trying to say but that's absolutely true, provided you're diligent, curious, and someone who does well with self-directed learning.
- DennisP 11y agoGiven that they linked to online sources for everything, I'd say yes. Some of those Coursera courses in particular are very high quality. Also worth nothing: "an increasing proportion of people hired at Google these days don’t have college degrees." http://www.forbes.com/sites/erikaandersen/2014/04/07/how-google-picks-new-employees-hint-its-not-about-your-degree/ http://www.forbes.com/sites/erikaandersen/2014/04/07/how-goo...
- gonzo41 11y agoDoes the advice of "just learn to use a few different languages and build a CRUD app that has a cloud hosted database" not hold true anymore? A really good learning experience is having a crack at making the same app for both android and IOS (much frustration with objective c) For a newbie stuff like persistence storage, learning MVC, learning objective c, java, android and iOS, sqlite, and all the other stuff in between (Xcode is awful). aAl of the other CS stuff is valid. Although i feel like you probably won't have the necessary buy in to learn algorithms and data structures well if you don't have a degree / GPA on the line.
- djur 11y agoDo you still need to buy an Apple computer in order to develop iOS apps? As long as that's true, I don't think "make an iOS app" belongs in any general-purpose advice for aspiring developers.
- gonzo41 11y agoTrue, most schools run both, or at least my university did/does. but for the self taught, go android, more phones thus cheaper to get into the game.
- Bostonian 11y agoI don't see much about scientific computing, such as the topics covered in the Numerical Recipes books, many of which are relevant to data scientists.
- GFK_of_xmaspast 11y agoThis seems mostly fine, a robust undergraduate education should cover most of those bases.
- lambdaelite 11y agoIt's interesting to compare this list with the topics covered by the Software Engineering Book of Knowledge or the Software Engineering PE exam. Requirements engineering, formal documentation, estimation, project management, and ethics all seem to be overlooked in Google's guide. I guess this is sufficient to be an engineer at Google, but this wouldn't be close to sufficient in other industries.
- quonn 11y agoThat's software engineering 101. Everyone learns that in school. Of course Google still needs all of that, just like everyone else. But you can pick up the knowledge part (that is actually tested in exams) very, very quickly.
- Iftheshoefits 11y agoNo, you can't pick it up "very, very quickly." That is a dismissive and indirect way to assert that engineering is somehow easier or requires less intellectual rigor than "higher" disciplines like CS or math.
- sukilot 11y agoRight. In school you can learn an ISO version that isn't relevant to he actual projects you take on a non-govt-contractor. And note that the vs topics are also presented as not need in formal schooling to obtain.
- quonn 11y agoI tried to make it very clear that you can pick up the knowledge-based part - or that part that you can learn at school or using books, which is also the part that is tested in exams - quickly. In that respect it is indeed easier. What may not be that easy is the experience to make good decisions. But there is no clear path for that, except being an engineer for a sufficiently long time. This piece was targeted at students and you can't just tell them: "Keep working somewhere else for 10 years".
- greedoshotlast 11y agoThe message: these are the kinds of employees we want to hire. If you follow these guidelines there is a good chance we would hire you. Universities: make sure you are teaching students these skills if you want us to hire your students.
- mauricemir 11y agoInteresting they don't mention any Database related tech ie set theory relvars and PL/SQL et all (plus the no sql query language)
- bsdpython 11y agoDatabases weren't part of the core CS curriculum at least when I was a student. I still don't understand why since it seems as core to understanding modern software as anything to me.
- mauricemir 11y agoNo wonder some told me that new devs often cant write a simple SELECT statement or use a database from the command line.
- kamaal 11y agoIt doesn't just stop there. They tend to rewrite a lot of things that you could do in SQL on NoSQL databases(Irony..) albeit the implementations are half written, buggy and break on adhoc inputs. Even more worse, these sort of things come and bite people while these design schemas. After NoSQL database fashion has taken off, schema design, performance tuning et all are rapidly getting rare skills to find people with. This results in all kinds tech debt. Much could be avoided by having good SQL skills.
- mauricemir 11y agoOr do as I do and go on the 1 week Pl/SQL Oracle course before starting a project.
- zxcvcxz 11y ago> They tend to rewrite a lot of things that you could do in SQL on NoSQL databases(Irony..) You do realize most "NoSQL" databases are "Not only SQL"?
- theandrewbailey 11y ago
- natch 11y agoThis is explicitly a guide for university/college students, and maybe that should be reflected in a title edit. Otherwise the article could be read as Google assuming that a university context is the only time and place to learn.
- jpwagner 11y agoInteresting, when I use the phrase "learn xyz" i mean "become very proficient at xyz" (maybe a notch below expert). This post and the comments here seem to indicate that most people take it to mean "get an intro to xyz" (a notch above novice).
- kin 11y agoThis is a guide for technical development. What I think is useful is DevOps knowledge and knowing your way around Unix or even Windows. Spinning up VMs and setting up your dev environment is often times more than just following directions because there's always some special case you run into that requires some knowledge and experience to solve.
- ken47 11y agoDoes anybody else notice and question the lack of functional programming on that list?
- endymi0n 11y agoLearn other Programming Languages: [...] Lisp and Scheme. Apart from that, there's probably a reason no top 100 company uses a purely functional language as their foundation.
- MichaelGG 11y agoIt's Google. They're notorious for using... less than advanced languages, to put it nicely. (C++, Java, Python, Go) Obviously it works for them. But just imagine if the founders had been more inclined to a LISP or an ML.
- deleted 11y ago[deleted]
- GFK_of_xmaspast 11y agoWe'd still be using yahoo?
- spopejoy 11y agoBig time. It's especially depressing given their huge focus on "object oriented programming," given the 1000s of travesties birthed in its name on an hourly basis in BigCos of the world. 1) Even if you don't code FP in your day job, your sanity and code will benefit permanently from a strong grounding in it. 2) Nothing beats getting paid to code FP.
- mparramon 11y agoThis reminds me of my 0 to web developer guide: www.developingandrails.com/2015/01/crash-course-on-modern-web-development.html
- jedberg 11y agoIT makes me sad that they have to specify this: "Checking off all items in this guide does not guarantee a job at Google"
- umbs 11y agoSurprised, computer networks and protocols are not listed. Isn't that knowledge essential?
- yzh 11y agoI think for parallel computing, this udacity course is very nice too: https://www.udacity.com/course/intro-to-parallel-programming--cs344 https://www.udacity.com/course/intro-to-parallel-programming...
- KedarMhaswade 11y ago> Add to your repertoire - Java Script, ... Should I ignore this as a typo? How am I to rely then on this as a classified information?
- gedrap 11y agoEh, I agree with most other commentators, saying that it's quite dissappointing and fairly confused why it got 300+ upvotes. Probably the influence of google.com domain. I even double checked the URL if it's not some publicly editable page that happened to be under google.com. If I had to pick one tip for a junior developer, I'd say slow down when it comes to adopting methodologies, techniques and use your own judgement. What's the benefit of doing? What are alternatives? When you learn about OOP design patterns, it's easy to suddenly see them everywhere. Factory here, singleton there, and with a bit of imagination observer goes here. Not everything should fit into one pattern or another. One of the benefits of the patterns is that it might make the solution cleaner, easier to understand. If it increases the complexity - don't (or at least think more about it)! When you learn about Agile (although nowadays it's a very ambiguous term and loads of stuff goes under this label), it's tempting to start organizing standup meetings, plan everything under sprints, assign story points, do TDD, etc. But think twice before going for it. What do you get back? Maybe the morning standups are not beneficial for the team, and just distracts everyone? Maybe story points are not worth the overhead of agreeing on, allocating them, etc and your team can do just fine without them? If some methodology doesn't really stick to your team, maybe it's an indicator that they are totally fine without it? For example, maybe you haven't had a morning standup for a week and no one has brought it up, everything's going smoothly. Not saying that the listed methodologies are wrong, they are not, just sometimes they are not beneficial. Same goes for a new language, a new promising framework, etc. Be critical.
- cwt137 11y agoHmm. They have something on testing, but nothing on requirements writing or project management.