4 ms·
I'm reminded of pg's essay on the power continuum of languages. http://paulgraham.com/avg.html http://paulgraham.com/avg.html The power continuum of the develo
by JackMorgan 13y ago
I'm reminded of pg's essay on the power continuum of languages. http://paulgraham.com/avg.html http://paulgraham.com/avg.html
The power continuum of the developers wielding those languages isn't mentioned as much, but clearly is an important issue. I've worked in blub languages with developers who are so many levels above me they are not even speaking the same language anymore. The problems they are trying to solve take for granted all I know, all I struggle with, and all I still haven't even learned yet.
The more I "level up" in development, the more I'm convinced there is not enough attention paid to how to really advance through those levels. Right now I'm three languages into "Teach Yourself Programming in Ten Years", http://norvig.com/21-days.html http://norvig.com/21-days.html but what about after that? And that is just one man's brief and not well-explained suggestions.
I'd love to see other developer's suggestions for how they advanced past that.
The biggest issue though is it's almost impossible to know your skill relative to the rest of the development world. We can't just time ourselves writing a script, like in the olympics, so almost all of us have a hugely overinflated or underinflated sense of our own skill. Everyone has hundreds of anecdotes proving their value over those who by any metric would be our betters (years of experience, languages mastered, formal education, etc).
I'm reminded of when I was a brand new developer in my first job, how pleased with myself I was at my commit messages, compared to my officemate. Sure, he worked on patching a financial aid system written in three languages, two of which I'd never even seen, and I only wrote sql queries to be run by hand, but I knew what made me better: commit messages.
This confirmation bias is one reason I like pair programming, especially between two partners of different levels. Suddenly the lower gets to be faced with someone who gets done ask the same things and avoids this problem and that problem. They see their relative place, and can aspire for levels greater, which before would never have occurred to them even existed.
- arthurjj 13y ago"The more I "level up" in development, the more I'm convinced there is not enough attention paid to how to really advance through those levels." This for me is the major takeaway from the article. Trying to learn material 2 levels up is unhelpful. It's especially bad since most of us are used to formal schooling where level progression is determined for you
- inetsee 13y agoThis is one of the fundamental ideas behind deliberate practice. You need to work right at the edge of your experience level. If you continue to work well inside your comfort level, you won't push your expertise out into new areas. If you try to move too far outside your expertise too fast, you won't have the foundation to support yourself; you'll flounder and get discouraged.
- freehunter 13y agoI've been constantly looking for that progression. I'm a very poor programmer, but I would love to get better. I know C, C++, C#, Python, Java, Bash, and Lua all at a basic level just from having been introduced to them in classes or at work, but I've never found a good path to take one of them and become good at it. I've tried books and tutorials, but I can't find a progression of "Read this book, then this book, then this book, then watch this Youtube series." I can't figure out how to actually write programs once I've finished the first class, the first book, the first tutorial. I feel like the second book that people recommend to me is always two levels above me and makes no sense at all. Especially when people recommend the programming practice sites where the problems are all about solving math puzzles. I'm not that good at math, either. I really wish that every profession came with a tutorial (outside of a four-year college program) saying "here's exactly what you need to learn, in exact order, to get started."
- vlasev 13y agoYou are taking a sort of a bottom up approach of learning the languages. It's sort of similar to learning Japanese for the sake of it (which is fine). Language is for communication and of course programming languages are to make things with them. You'll find the process more enjoyable and easier to learn if you learn it with the goal of doing something with it, not just being good at it in general. If you need to make something and you can identify what you need to do to get there, you can start chipping away at the requirements and get closer to your goal, making the whole journey more exciting. Ideally you would approach this from both ends. On one end you are learning bottom up. On the other end you see what you need to make and you backtrack from there until something you know and you try to make your way up.
- VLM 13y ago"They see their relative place, and can aspire for levels greater, which before would never have occurred to them even existed." Note this applies to UI design. A bad UI makes it impossible for the end users to "level up". Typical example: Start with the corporate standard database system, Excel. You end up with secretaries doing the equivalent of a simple SQL "JOIN" by hand. Hopefully using copy-paste instead of hand typing. Sadly I only dream I was kidding. On the bright side technology has improved as in 2013 we use Excel for this task but in 1996 I worked at a big iron financial services corp where the master customer database was a word processor file.
- erichocean 13y ago> You end up with secretaries doing the equivalent of a simple SQL "JOIN" by hand. Before Excel, they wouldn't be doing it all. Baby steps. Spreadsheets as a paradigm is HUGELY successful at allowing normal people to do number crunching—number crunching that pre-spreadsheets would have required a programmer, and most likely, would never have been done at all. I think that's a win, even though we can (and hopefully will) go beyond that over time.
- VLM 13y agoSure they did. That was my point, in '96 the master customer list was a word processing file. They use a spreadsheet now because mere mortals can't figure out columns in Word.
- erichocean 13y agoAh, I misunderstood.
- seanmcdirmid 13y ago> Before Excel, they wouldn't be doing it all. Baby steps. ... Spreadsheets as a paradigm is HUGELY successful at allowing normal people to do number crunching Spreadsheets were a thing before they were put into computers, you know... http://en.wikipedia.org/wiki/Spreadsheet http://en.wikipedia.org/wiki/Spreadsheet > The word "spreadsheet" came from "spread" in its sense of a newspaper or magazine item (text and/or graphics) that covers two facing pages, extending across the center fold and treating the two pages as one large one. The compound word "spread-sheet" came to mean the format used to present book-keeping ledgers—with columns for categories of expenditures across the top, invoices listed down the left margin, and the amount of each payment in the cell where its row and column intersect—which were, traditionally, a "spread" across facing pages of a bound ledger (book for keeping accounting records) or on oversized sheets of paper (termed "analysis paper") ruled into rows and columns in that format and approximately twice as wide as ordinary paper. Spreadsheet applications made book keeping jobs much easier, to the point that book keeping (not programmer) is on the outs as a speciality job.
- marktangotango 13y agoIn my opinion, compiler implementation is such a path. You can touch almost every aspect of a modern system, and many well trodden areas of Computer Science: 1. Lexing - DFA's and NFA's, hand coded or with a lexer generator, relationship with regexes 2. Parsing - LL, LR, table driven, recursive descent, hand coded, parser generator generated 3. Interpretation - simulate control flow and data representation in a host language 4. Translation - generate bytecode for an existing vm like JVM or CLR, or assembler for processor architecture of your choice 5. VM - implement you're own vm, choose an instruction set, implement garbage collection Getting a handle on this set of knowledge and skills will take you a considerable way to becoming a 'master'.