- You are not your code.
- You discard your code for something better.
- You look for strengths in other people's solutions.
- When you criticize, it is "defects only," and not style points.
- You are ready for the next person in the door to have a great idea.
- You work with others to (re)combine ideas in pursuit of excellence.
Thursday, December 29, 2011
Egoless Programming
Wednesday, December 28, 2011
Middle-aged borrowers piling on student debt
It's interesting. There are fields, of course, where formal education and debt are necessary. And then there is computer programming, where Robert Speer, Eric Raymond, and I suggest you can learn for "free." Well, at least for any of definition of "free" that includes a web connection and a spare PC.
I'm sure free-form learning on a web connected PC isn't for everyone, but I don't think the bar is that high. You just need to think about your own learning plan, and then work at it patiently.
Rome wasn't built in a day.
Saturday, December 24, 2011
Alerntate Paths: via Eric Raymond
That's a bit different than the order I suggest in my sidebar. I'm basically saying (using his numbers) do 2, then 3, then 1. Perhaps that's because I expect that people coming to my site have some small experience to programming and are committed to a long-term effort.
If you aren't sure, and are testing the waters, then I'm with Eric. Dabble with programming first, and then attack a software stack (like LAMP).
Friday, December 23, 2011
Alternate Paths: Processing
Wikipedia describes Processing as:
an open source programming language and integrated development environment (IDE) built for the electronic arts and visual design communities with the purpose of teaching the basics of computer programming in a visual context, and to serve as the foundation for electronic sketchbooks. The project was initiated in 2001 by Casey Reas and Benjamin Fry, both formerly of the Aesthetics and Computation Group at the MIT Media Lab. One of the stated aims of Processing is to act as a tool to get non-programmers started with programming, through the instant gratification of visual feedback. The language builds on the Java programming language, but uses a simplified syntax and graphics programming model.
It looks really good to me, as a first language, as does this Learning Processing site.
For someone looking for a first programming experience, and immediate graphic feedback, it looks pretty ideal.
Alternate Paths: JavaScript
What's not to love? Well there is a pretty interesting discussion here at John Resig's blog. JavaScript is kind of a messy language, evolved over time to get things done in web pages. That makes it a little hard for me to endorse for beginners. As comments at John's page show though, people have learned JavaScript as their first programming language, and they endorse it.
JavaScript is also used at Codecademy to teach first-time programmers. There are many happy reports coming from Codecademy students as well.
So perhaps this is a good first-step approach for many. It doesn't start at the low levels I prefer, it kind of starts at the top of a web-programming stack, but if you like programming after a JavaScript exposure, you can branch back down.
Update: Alternate Paths: HTML5
Thursday, December 22, 2011
Should You vi?
I'm going to say that yes, you should learn it if you are taking a Linux/UNIX centered development path. There will be a time when you just need to quickly edit some dumb little text file, maybe over a telnet or ssh connection, and vi will do it.
Google "vi tutorial" and spend some time. It might be fun, as well as a little frustrating ;-). Just remember, when in doubt, pound that Esc key!
A few additional comments:
1) I run vi from the command line. When I'm in a GUI mood I choose something else.
2) Whenever I load a new Linux system, I add the full vim package. Vim is vi plus nice things like colored syntax highlighting. When I can, I vim rather than vi.
3) Back in the old-school days there were "vi versus emacs" arguments (see Editor War). I won't comment on that. I ended up a "vi guy" alternately because I like a light environment, or I just happened to use vi first.
Don't Forget Exercise
For some time, scientists have believed that BDNF helps explain why mental functioning appears to improve with exercise. However, they haven’t fully understood which parts of the brain are affected or how those effects influence thinking. The Irish study suggests that the increases in BDNF prompted by exercise may play a particular role in improving memory and recall.So, alternate that butt-in-chair time with a little time on the trails. Not only does it feel good, it improves learning.
Alternate Paths: Java
That said, I'm not sure that it should be a "first language" in this day and age. Java is a very formal and structured language, and requires some conceptual computer science thinking for efficient design and use.
Perhaps if you are in a CS curricula and Java is part of the course plan, you'll be fine. I'm not so sure that it is as easy to just Google "java tutorial" and the "java web tutorial" and build it up on your own.
I'd say go with PHP (sidebar), or Python, or Ruby as a first language, and then come back to Java if-and-when you need it.
Update: Greenfoot might offer a gentle Java introduction.
Alternate Paths: C++
I tried to like C++. I really did. I even bought Bjarne Stroustrup's book, "The Design and Evolution of C++." I'm sorry. That book just reads as an apology, a justification, for why C++ was such crap.
And C++ was bad. It was the C successor that broke the C dynasty. Apple went to Objective-C, a much better "Object C." Sun cleaned C++'s clock with Java, and when Microsoft did a fork, it was from Java to C#.
There was a time when C++ was more heavily supported, particularly as a Microsoft programming language, but that day is gone. I don't think there is much of a need for advanced programmers to learn it, and beginners should avoid the horror.
Alternate Paths: Ruby
I think Ruby works well for a beginning programmer's first language. It fills a niche similar to Python and shares many of the same strengths. I agree with Luke Maciak at Terminally Incoherent that either of these two languages avoid the initial complexity of a strongly structured and typed language like C++ or Java.
So, sure. Learning Ruby and then Rails is a perfectly valid path into programming.
You might Google some of the "Ruby versus Python" arguments before you begin, but as a first language it might not matter that much. Both are great.
(I put Ruby and Python as both more "advanced" than PHP, but whether that means you should skip PHP, or learn it first, is up to you. In my sidebar I assume the PHP path, as part of the traditional LAMP stack.)
Ruby Wins?
Let’s be clear that our sample selection is not representative of all developers. We pulled this data from 500+ early users of BestVendor who are developers. All work for companies with fewer than 100 employees, and the vast majority work in the startup-tech world. The fact that they signed up for the BestVendor beta suggests that they’re early adopters.That said, the results are very interesting, and the most-loved tools do make a pretty good to-learn list for students of software development.
My first instinct was to look for "development language," which isn't there, but "framework" is, and we can deduce from that some languages information:
28% Ruby on Rails
11% Django
9% .Net
6% CodeIgniter
5% Spring
The first, Ruby on Rails, is a clear winner for the Ruby language. Django is a Python framework. The .Net would be mostly C#. CodeIgniter is a PHP framework. Finally, Spring is java.
It's really pretty amazing that in this pool the "most popular" programming language comes out 5th. Not to mention that PHP, the "first language" recommended in my sidebar, comes out 4th.
Hmmm. My meta-suggestion is that programmers keep one eye on which languages and technologies they love, and the other eye on where the market is heading.
Wednesday, December 21, 2011
Should You CLI?
Graphical user interfaces (GUIs) crept in, first on rare and expensive computers, but over time on everything down to a phone. GUIs offer a more control-panel interaction. It is look and click. It is navigational.
There are many good reasons for programmers to be skilled at both modes. A GUI has bandwidth and delivers massive amounts of information on a modern display. On the other hand, the CLI conversation is a natural mode for performing a sequence of actions.
We can run a modern SQL database, like MySQL, from a GUI (or web-based) interface. It makes it very easy. On the other hand, there is no record or structure to the conversation. When we connect to a database with a CLI client, we start conversing, and have a scroll-back history of every action performed.
When I connect as root to a production MySQL database, I do it with a CLI for this reason. I can type once, and look twice, before hitting that sometimes scary "enter" key.
When I say "connect" I raise the second strength of the CLI. It requires very low bandwidth and can be done with a telnet or ssh connection from one UNIX system anywhere in the world to another anywhere else in the world. I've telneted across the office and (via a secure connection) to servers thousands of miles away.
You can do remote operations with GUIs, if they are set up, and if their crash isn't what you are trying to fix! But the CLI will pretty much be there as long as a UNIX box is alive. It is the ultimate fall-back, as well as a powerful tool for daily operations.
So yes, I'd say you should CLI (as well as GUI), but by all means Google "CLI versus GUI" for more opinions!
When you hit steps 4. Learn UNIX Basics and 9. Learn MySQL Basics value those CLI lessons.
True Names
I think that if I were beginning today, trying to build a working reputation as a programmer, I'd do it with my True Name. There's an old saying from business that "every customer contact is a sales opportunity." In the web, as we grow, learn, and network, every contact is an opportunity.
As you build points and badges at programmer's forums, you build a rep. It's probably better do start that now under a True Name.
How you integrate that, or separate that, from a social persona on Facebook or something ... that might be a harder problem. Luckily, I'm too old to worry about it.
Egoless Boots
How did I name this thing? Well, never fault a dot-com name that is simply available, but beyond that, I want this to be about bootstrapping on an egloless path.
Bootstrapping is an old word. It refers to pulling oneself up by one's own boot-straps. The phrase made the jump to computing sometime in the 1950s and has stuck. It generally means starting small and working your way up. I hope to provide one path for "pulling oneself up" into computer programming, using the resources of the web.
"Egoless" might seem a strange word to add, but I think it's important. It refers to Egoless Programming. The idea is that, as much as possible, we should keep our egos out of it and just pursue the best answer. When two programmers trade ideas, it should be about what's best for the user at the end of the day, and not just "mine's better." Having that attitude makes us better students, and teachers as the years go by.
If that sounds good, continue on to my sidebar
Tuesday, December 20, 2011
Resources: YouTube
If you are a visual type, or just want a break from surfing and skimming, a video can work wonders. Ultimately the style decision is all yours. When you are ready to learn HTML basics, or advanced HTML, you can Google a tutorial, or watch a YouTube video, or both.
There are amazing resources out there.
Alternate Paths: Lisp
Vladimir Sedach suggests that:
Common Lisp is the best language to learn programming
I can see strengths and weaknesses in the approach. Lisp as highly regarded as a language, but doesn't have a tremendous job market. It might be very good to develop core skills, but I suspect that after learning Lisp students would look for a more common and marketable skill set.
I'd welcome comments from anyone who started with Lisp first.
Cognitive Surplus and Walled Gardens
This site represents my cognitive surplus.
In tension with this is the idea of a walled garden. A walled garden is an entity, sometimes a web site, that encourages users to stay withing its borders. Commercial vendors have an interest in capturing cognitive surplus to expand their gardens and make them more attractive destinations.
I'm an outsider on edu-hacking, and the future of education, but I think there is a clear competition going on now between the network of "sites without walls" and those more aggressively pursuing "walled garden" status.
I would bet long-term on the open systems, but if I'm going to be "egoless" on this too, I should say it's all good. If an ed-tech business can help you learn, and provide decent ROI, go for it. Of course, you might browse for the free and open alternatives.
Monday, December 19, 2011
Robert Speer Recommends a Similar Path
How to get into Web Development with NO degree and NO debt
Robert emphasizes career building and jobs getting more than I. Actually in the sidebar I don't talk about those at all. My assumption was that as you make the climb through the LAMP stack you'd get the lay of the land, jobs-wise.
I'm 100% with Robert that the way to demonstrate skill is just that, to demonstrate skill. If you create your own website, from scratch, and can describe your methods, you have a good presentation for any prospective employer.
People who just bolt together pieces they don't really understand will not fare so well.
(I plan a future post on the whole "badging" phenomenon.)
Two Families
What's really interesting is that changed, something happened to break the dynamic nature of the market. I think it was just the sheer number of users who arrived with IBM PCs and who settled on UNIX for back-office systems. When it was a few thousand programmers, they were a mobile pool, and seduction to a new standard was possible. With a few million programmers the equation changed. Suddenly the standard had a huge weight.
And so we are left with the two surviving families, Windows and UNIX, into the future. (I lump Apple and Linux into the UNIX family.) They are infrastructure now, and might last a really long time. Other curious standards, like wall voltage, and the railroad gauge, were set a long time ago. So it could be with these.
We are moving to the cloud now a bit, and that might seem different, but it is just an abstraction layer. As I understand it, essentially all cloud servers are running UNIX, and those few that aren't, are running a Windows variant.
So, I think my sidebar recommendation to bootstrap the LAMP stack is a good one. It's infrastructure, and will be slow to change.
Alternate Paths: Arduino
Sunday, December 18, 2011
Alternate Paths: Python
But if you just want to program, quickly, it's hard to beat Python, and in particular the Dive into Python resource.
The strength of it is that you'll do some programming soon, and get a feel for what the activity is all about. You'll get to see how much you like sitting with your butt in a chair, trying to make things work. You'll learn whether the intermittent triumphs make it all worth-while.
The downside is that knowing just Python doesn't buy you a huge solution domain. Yes, you can write small programs, and they may be useful to you, but it's hard to deliver pure-Python to other users. You either have to embed them in a web page (as in LAMP, above) or make a full blown program, with installer, for a target machine.
On the other hand, LAMP is used on millions of web servers world-wide, and any LAMP skills you have will play across all of them.
Perhaps you should Dive into Python, and then if you like it, go for the full LAMP tour.
Top 10 Ed-Tech Trends
Khan Academy (6) versus The Higher Education Bubble (8)
and
Open (9) versus The Business of Ed-Tech (10)
I'll side with Khan and Open. Indeed it seems that in any world with cognitive surplus, education should become easier, cheaper, and more common. That's what my sidebar is all about.
Ten Years?
Teach Yourself Programming in Ten Years
It is a reaction to all the "Learn Foo in 7 Days" books we see in bookstores. Personally, I always took those titles as a challenge. If they said "7 Days" I'd think I could do it in 2.
I tried that as an interview question for a while, "If you saw a book that said 'in 7 Days' how long do you think it would take you?" Some thought that was a mean question, but I think it's good for a programmer to have some confidence.
In my sidebar I say:
There are many guesses about how long it should all take. I'd say you can be writing simple web programs in a few weeks, be turning out solid work in about a year, and be an expert in a few more. That's assuming you really get into it.
I guess the hedge there is "assuming you really get into it."
But still, if you do get into it, you should develop your independent learning ability, and scoff at "7 days."
Howard Lindzon writes ...
It's an interesting article spanning venture capital, web dynamics, and the future of education.
It makes yesterday's effort, setting up the "Computer Programming" sidebar, seem worthwhile.
Saturday, December 17, 2011
Hello World
I find the evolution fascinating, and read sites like Hack Education with great interest.
There was one page at Hack Education that set me back though, it was this story on the state of learning for computer programming:
Codecademy and the Future of (Not) Learning to Code
Apparently, while there are many HOWOs and Tutorials on the web, students aren't finding a framework that puts them all together. So, I took a couple days and typed one up. It's there in the side-bar, in 12 (hard?) steps. The first section describes my method:
0. Learn Computer Programming
As I say, I offer just one approach, it may work for you. Have fun.