Periodic Table of Software Engineering

I came across this Periodic Table of Software Engineering, and I think it’s an excellent visualization.  For those working their way to become software engineers, it provides a nice map of skills, topics, and knowledge areas to cover.  For the rest, it clearly explains why software is so much more complex than anybody thinks.

What is the hardest part about learning to program?

Quora runs an interesting question – “What is the hardest part about learning to program?“.  As always, there are plenty of insightful answers with suggestions, tips, shared stories, research and statistical data, and more.

For me personally, this answer in particular was useful, as I’m very well familiar with the phenomena, but never knew there was a name for it – Dunning–Kruger effect.

Science for fun – fun science topics and experiments

Science4fun is a website that helps make science more fun for kids.

Welcome to Science4Fun. It is the place for kids to learn science in a fun way. It has a wide variety of interesting science topics that are full of articles, and easy to do science experiments. All the content of the website is written in simple English with a lot of pictures to help you understand the concept easily.

With kids being a lot more video-oriented these days, I think this site is more helpful for parents, rather than the kids themselves.  But it’s a good effort, with a good selection of topics and experiments.  If you are looking for a way to have fun with kids while making it useful too, give it a try.

Why So Many Top Hackers Hail from Russia

Brian Krebs has an interesting post on “Why so many top hackers hail from Russia“:

Conventional wisdom says one reason so many hackers seem to hail from Russia and parts of the former Soviet Union is that these countries have traditionally placed a much greater emphasis than educational institutions in the West on teaching information technology in middle and high schools, and yet they lack a Silicon Valley-like pipeline to help talented IT experts channel their skills into high-paying jobs. This post explores the first part of that assumption by examining a breadth of open-source data.

Overall, not very surprising, but the details and references are interesting.  It seems a lot has changed since I graduated (back in 1995).

Via Slashdot, which also has some insightful comments.

Netsim – a network simulator game for teaching

Netsim is a simulator game intended to teach you the basics of how computer networks function, with an emphasis on security. You will learn how to perform attacks that real hackers use, and see how they work in our simulator!

Netsim is completely free to play.

First computer – Tesla PMD 85-1

Once in a while people ask me what was the first computer I could get my hands on.  Mistakenly, I’ve often answered that it was Commodore 64.  But today I did some digging and realized that it wasn’t true.  I did use Commodore 64 too, but that was mostly for playing games – my uncle was a head of a nearby Fire Station and he had one of these in the office, but that wasn’t the first computer I used, and it wasn’t the one I learned to program on.  That honor goes to Tesla PMD 85-1.  Here is a picture to give you an idea (thanks to root.cz):

pmd85

We had a computer lab in school, with 11 of these things.  10 were used by the students and 1 was for the master station for the teacher.  Some of the highlights that I still remember: black and green monitor, cassette tape drive for loading and saving programs (sorry, no hard drives or floppies, or network really, except for printing on a slow and very load dot-matrix printer), a very uncomfortable yet colorful  keyboard.  The keyboard is worth a separate mention.  As seen above, it had blue, red, and grey keys.  It didn’t have an Enter or Escape keys.  But it had two EOL (end of line) keys right next to each other – I don’t remember why though.  And STOP and RST (reset) buttons.  And it was almost QWERTY.  Here is a close-up image from Wikipedia:

PMD_85-1

For some reason, I remember the keyboard slightly different.  Those blue K-keys were to the left of the main area, organized into two vertical columns.  But I was unable to find an image of such model, so it must be my memory failing.

When I was back in 5th grade (that must have been … hmm … somewhere around the year 1990), a new Informatics (that’s how Computer Science was called back then) teacher at school opened up an after hours Computer Club, which allowed all students, and not just the high graders access to the machines.  I don’t remember the name of the guy, or how I got involved with it, but I do remember that I got hooked on it pretty much immediately.

A few times a week, we’d stay for an hour or two after classes and learn Basic programming language.  He’d explain to us some basic concepts such loops, conditions, and variables, and then would let us work on our code.  For the rest of the days, I remember, I was walking around with the paper notepad, in which I’d write source code by hand, debug it, test it, and improve it, so that I could spend less time doing so in the lab.  Machine time was limited (an hour or two per session, with some of it taken for loading the program from tape, typing in changes, and saving back to tape), so you’d optimize for using it to actually run the program, verify the result, and, maybe, try one or two more ideas.

If I remember correctly, I worked on these machines for two or three years.  Then, my other uncle, who was the first real IT guy I knew, got me an IBM XT machine.  It wasn’t an original IBM, but a mix of Soviet countries manufacturers.  But that was great!  That was the closest thing to the modern PC – CGA graphics with 4 colors, 640 KB of RAM, 10 MB hard disk, and a floppy drive!  I thought nothing better was possible until I saw a VGA monitor with 16 colors.  I think then I realized that I’ll never catch up to the technology developing so fast.

And one last bit of memory.  Even though I wrote quite a bit of Basic code while learning English in a specialized school, it wasn’t until I came to Cyprus and started learning Pascal programming language in Intercollege, that I realized that all those words I’m typing into the computer to make it do things are ACTUAL ENGLISH WORDS!  Now that was both embarrassing and empowering at the same time…

Oh, good old days.

P.S.: Yes, I’ve played on Atari too at my friends’, but I never owned one of those.

Why Learning to Code is So Damn Hard

Erik Trautman of the Viking Code School Blog did an outstanding job explaining “Why Learning to Code is So Damn Hard“.  It’s a rather long read, but it’s easy to get, and it explains the different stages extremely well.

coding_is_hard_combined_chart

He looks both at the variability of confidence as one gets competence, the scarcity of resources for each stage, and the scope of knowledge.  Just to have it here for a quick reference, here are the stages:

  1. The Hand Holding Honeymoon is the joy-filled romp through highly polished resources teaching you things that seem tricky but are totally do-able with their intensive support. You will primarily learn basic syntax but feel great about your accomplishments.
  2. The Cliff of Confusion is the painful realization that it’s a lot harder when the hand-holding ends and it feels like you can’t actually do anything on your own yet. Your primary challenges are constant debugging and not quite knowing how to ask the right questions as you fight your way towards any kind of momentum.
  3. The Desert of Despair is the long and lonely journey through a pathless landscape where every new direction seems correct but you’re frequently going in circles and you’re starving for the resources to get you through it. Beware the “Mirages of Mania”, like sirens of the desert, which will lead you astray.
  4. The Upswing of Awesome is when you’ve finally found a path through the desert and pulled together an understanding of how to build applications. But your code is still siloed and brittle like a house of cards. You gain confidence because your sites appear to run, you’ve mastered a few useful patterns, and your friends think your interfaces are cool but you’re terrified to look under the hood and you ultimately don’t know how to get to “production ready” code. How do you bridge the gap to a real job?

I’ll also borrow the resource density chart, which is very handy:

coding_is_hard_resource_density

 

Not only the article explains why learning to code is so hard, but it also suggests how to make it easier, depending at which stage you are.

I think this is one of the best articles on professional development in software development that I’ve seen ever.  Do read the whole thing.  It’s that good!

awesome courses – list of awesome university courses for learning Computer Science!

awesome courses – list of awesome university courses for learning Computer Science!

While there were quite a few of these from before, this one is a really good selection.  I’m currently going through the slides of the Cloud Computing course from Cornell University.