The mind of a programmer

http://web.archive.org/web/20121015012216/http://stephenramsay.us/2012/06/10/learning-to-program.html

I found this guy’s blog through a very weird set of clicks, but I’ve been reading through it and this one seemed like it might be interesting to some folks here. I won’t taint it with my opinions (at least not unless there’s some discussion about it).

For me it is, the need to solve a problem and persistence. I always assume I will mess it up a few times. I see programming as a tool, and I can only focus long enough to solve the problem at hand, same with hand planes, chisels, files, paint, all sorts of stuff. As with all tools in my “toolbox” I love them all and would not be me without the basic knowledge of what is possible with each, knowing that I am usually not immediately capable of that.

 

My interest can only be held “long term” with a “complex” system that involves a lot of “tools”. Specialist/expert is not how I would ever refer to myself, jack of all trades feels better.

Should you have strong legs to be a postman? )

Something like that

The part about being happy with the little bit of a foreign language you know, is how I describe what the difference is between a nerd and a geek, at least in my opinion. Nerds will reach a level here they think they they have maxed out the knowledge they can have on a subject, but geeks never know enough, and will always try to find more to learn.

Labels aside, I can never know enough in an absolute sense, but I see diminishing returns on a single subject, both in terms of utility and interestingness. As a result I tend to hop from subject to subject, not because I am anywhere near ‘max’, but because learning is more rewarding elsewhere.

Except chemistry. I don’t enjoy chemistry. :slight_smile:

“Musicians, too, are often natural hackers, and I think it’s because they know what it means to be inept. You’re not Eddie Van Halen when you start out on the guitar. In fact, your fingers hurt for weeks and you wonder how anyone manages to make music with this damn thing. But hey! That sounds sort of like “Smoke on the Water.” And off they go. Sucking for years. But then gradually, they don’t. And way before they definitively don’t, they think of themselves as guitarists.”

I don’t think that it is innate. It’s a skill that can be learned. Someone who has already learned an instrument or foreign language must have learned it though. The skill of sucking, but continuing anyway is needed for programming. It’s not a gatekeeper though. Anyone can learn to program (and should, at least a little).

Chemistry was fun until it turned into a memorization game. And the labs were really boring.

I think nerd and geek are regional terms. Like soda.

It would be nice for a few more people to understand it a tiny bit, if, else, when…loop. All my friends kids that are old enough I put a nano in there pocket and make then change and flash the blink sketch a few times. Hopefully it is the programming gateway for them.

Closest thing to magic I have even been a part of…but I did not have to go too far. the first few classes felt like the the things I had been taught before it were all a lie.

When I was about 6-7, my grandpa bought me a little Vtech "toy" computer. It only had a single line display, but the best part was that you could put it in "advanced mode" which was actually BASIC programming. They had some sample code you could enter to do things like play twinkle twinkle little star etc.

It was the perfect start to thinking like a computer, simple commands on top of one another to do complex things. My grandfather gave me a gift that would eventually turn into a career a few months before he died. I wish he was around to see what it became.

Shoot that is the best story ever! My grandma had the foresight to buy me an IBM PS2 when it was on clearance from the Navy base. She never got to see how it has fully changed my life but her decision to spend that kind of money is one of the largest factors in my comfort with technology.

I really hope 15 years down the road we get to hear stories of how the things we are building changed there lives.

1 Like

“My dad was so obsessed with his low rider, he didn’t even notice the laser had started my hair on fire. Third grade was the worst”

My first programming experience was the ti-83. I made a whole menu system that would bring up notes for specific classes and tests. 9th or 10th grade-ish. I’m not sure that directly affected my later software career as much as the science and math I learned in high school, which lead to engineering school, which led to a job, where I had to finally really learn programming.

I always thought a Nerd was a Dweeb, but with no fashion sense, a Geek was someone in the carny sideshow that bit the heads off live chickens… But I guess time, and our language, has moved on.

My first programming was typing in programs from a magazine into my VIC20. Boy it took a long time to get one typed in and then you could only use it until you turned the power off. That’s why I was so glad when I found instructions for building an interface to hook my stereo up and record the programs on cassette tapes. :slight_smile:

(Actually that is wrong, I took an advanced computing course in high school that gave me access to a teletype that was connected to a computer at OMSI and I wrote a program to calculate bowling scores. Then a few years later I took a FORTRAN class in college where you handed your stack of punch cards in to the computer gawds and they ran it for you.)

Soooo many thoughts I want to add to this conversation but each one goes into a different direction of thought.

Foreign languages: It is known to many that learning a foreign language grows your brain in many ways. I know of several examples but my favorite it my wife’s story. She had struggled for years with Trigonometry. (I still do) She spent 6 months in a study abroad program in France and learned French well enough to get by. She was not studying math during this time. She came back and retook the Trig class she had failed before and Aced it. Same teacher same everything. She just understood the concepts easier. Learning anything difficult grows your brain by making new Synaptic connections. Those connections could help in surprising ways.

People who choose to learn something on their own: I can think of a ton of examples of people who decide they want to learn or do something and dedicate a lot of time and energy to do it. One I saw yesterday in the news is the youngest kid to make a working Nuclear Fusion Reactor at home. People are amazing! If they decide they want to learn something they can accomplish so much. I have done it myself several times. I want my kids to do it to. I want to help them find something they are interested in and let them learn as much as they can about it.

Last disjointed thought. Programmers Detail oriented vs Macro oriented: I started my career as a C# programmer. I really wanted to be an amazing programmer. I wanted to learn the best practices and use my creativity to make high quality, reusable code that would benefit the people that used it. I got to the point that I was building quality code and it was creative as hell. Usually very easy to read and maintain. But I was always so SLOW. My coworkers could produce working code much faster than I did but mine was usually more bug free and had more versatility in it. But I took forever to write it and I often ended up wasting a ton of my time adding features that were rarely or never used. later on I started doing more of the SQL development for my company. I excelled at it. It was easy to read, fast to code, creative and powerful and efficient to run. A few years later I think I figured out the difference.

Some people are very detail oriented. Some people are very Macro high level thinkers. I have learned that some programming languages are geared more toward one type than the other. C#, Java, and other “Object Oriented” programming languages are geared more toward the macro high level thinkers. Because it is easier to start with a concept and understand the big picture first. then you come up with abstract objects that will handle general functions like a skeleton. Then you add details to flesh it out. But with SQL you want to start with the lowest level of detail. Select Specificfield from specificTable where blah blah. A macro thinker writing SQL will want to start with the From clause and joins and they will get lost sometimes when they work toward the details. they may even do a lot of extra work pulling data from the wrong tables or get multiple rows they didn’t think about how it would affect the Details of what they wanted. they will end up rewriting or refactoring their SQL over and over to get it to work. by then it is usually less efficient and slower to run but it would work.

A Detail oriented person will start with the lowest level of detail in the SQL and then add the digger data. Always testing to make sure the sample data they are pulling is what they expect. Until they finally have all their joins and groupings complete. they can usually write SQL fast and it is usually efficient because the language was BUILT for people who think in the details. But a detail oriented person writing C# will suffer like I did. I would start by writing some detailed code that would handle a small but important piece of the project. then i would add a feature. Then another. Soon I would realized that I needed to refactor the code and move some of the functions out into another method or into another class. I would repeat the process over and over. I would find that I would waste most of my time refactoring to move code and features several times before they were where they should be.

With that said I am not saying that either type of person is BAD at either type of programming. I am just saying one type comes faster and easier. I have a friend that is building a website for another friend. He has spent days programming it the right way to every detail. But he should have started with quick and dirty to get something done. The details could have been fleshed out later.

Anyway. My advise to people who want to program as a career is to figure out which type best fits them and go with it. They will feel a lot more accomplished and it will come more naturally.

1 Like

I bought myself a VIC20 in the mid 80’s, and had no storage as well. I played around with BASIC as much as I could, and also took a BASIC class in jr. high school. Since I got so much practice and was always starting from scratch, I got pretty good at it. Fun times…

I also had a VIC20 way back when. Aren’t we all happy we’ve moved beyond 8 bit technology.

1 Like

Interesting discussion about big picture vs. detail in coding and languages, @Aaryn

I’m definitely in the big picture camp, but I can drill into the details when needed. I prefer to think in concepts and flows more than details. I did learn to code in C/C++, which requires a high level of attention to detail. I am grateful that I did, because higher level languages tend to hide details that are sometimes key to troubleshooting.


I’ll offer a different tangent… In the early days of coding, it took a long time to compile and run the code, so it was more important to get code right while writing it. Now that computing speeds have improved and compilers are so much better at finding common errors, it’s more efficient to create the code, run it, and fix it in quick iterations.

As I’ve moved to CNC, I find myself having to slow down more. The time it takes to 3D print something is in hours, rather than milliseconds, so the cost of each iteration is greater. Similarly, mistakes with a CNC router may not show up until hours into the job.

Of course, it’s not 100% that way. The CAD/CAM programs do a good job of simulating the physical item on the screen, including tool paths, slices, etc. But I still find myself having to slow down and thing things through more thoroughly when working in CNC world than when working in a modern coding or scripting language.

Aha! That’s a good strategy!

If you haven’t used something like create react app in npm (node.js, javascript), then you should. You save the file, it compiles it and reloads the page in firefox. If there are errors or warnings, they can even replace the webpage with the error text. It’s lightning fast. My day job uses C++, CMake and Catkin, so my builds take about 30 seconds, or 10 mins for a clean build. It sure makes me miss the instant feedback.

There are still people who run builds that take hours or even days. They submit code changes to their revision control and depend on the build computers to do it for them. That sounds pretty hard to me. I am not that detail oriented (and I’m not going to go back and proofread this to prove it).

I think nerd and geek are regional terms. Like soda.

 


I think I worded what I meant wrong. People just always ask me what a nerd is vs a geek, so at some point I had to just make up some definition, and that’s what I went with. And now that “geeking out” has become a thing, I think it applies.

Anyone can learn to program

 


As much as I would love this to be true, I don’t believe it is. Some people just do not have the mind for it. I’ve had to do hiring for my customers on and off over the last 20 years, and we had some students fresh out of college, who just still had no basic grasp of programming at all. You could say it was bad teaching, but in a few cases, some of them were hired when I wasn’t available to interview them, and working with them in the months after it, it just didn’t click in their head. They could program in the sense that they could go to google and type “How do I do this thing in the language I need to do it in”, and they would get code from people and paste it in, and hope it worked. They knew the syntax of the language, but they never knew what it was actually doing, and if you asked them to come up with anything original they just couldn’t do it. My oldest son is currently a Teaching Assistant for a coding camp here in town. He’s complained to me a number of times about people who sign up, and just can’t wrap their head around it.

I also hear people say all the time that “Anyone can learn to draw”. Well, I can’t. Doesn’t matter how much I practice, what people try to teach me, I can’t draw. My nieces and nephews in kindergarten can draw better than I can. It’s because I can’t visualize things in my head. I can conceptualize things, and describe it as if I was writing a book about it, but I can’t actually picture it, so when I try to draw things, I just can’t do it. So maybe 99% of people can learn to draw, but I can’t. And maybe 99% of people can learn to program, but I’ve met some of the 1% that can’t.

1 Like

Can’t or won’t? Maybe I’m an optimist, but I think it was maybe just the wrong time or the wrong motovation or the wrong approach for those people.

I’ve tried to teach my 4 year old how to sound out words and “read” them many times, but he just doesn’t get it. Maybe he just can’t read? Or maybe, he doesn’t understand the benefits, or he hasn’t had enough exposure or he just hasn’t found the right way to think about it yet.

There’s a good chance I’m not being realistic, but that’s my stance on it.

HR detected in the thread! :wink:

I’m developer, but due my position in have participated in a lot of interviews last 10 years. I can say that a lot of people trying to get a job with high salary, but they don’t realize they don’t fit to such job. May be i have too high expectations because i hire only senior developers.

Generally i disappoint with modern popular position that programming is a manufacturing. “Take a course, get a job where you will carefully follow a flow and participate to enough meetings and you will succeed”. Similar to a working on automotive assembling conveyor.

No

I’m still on position that programming is an art. You have to have a talent. What properties an artist must have to be talented? I don’t know. He just is or not.

Only good thing from this hype around IT is that when more people will try to come in then more talented guys will be found.

And for nostalgic theme of the thread )

I had started in late 80’ when had worked summer month on factory to get money for buy parts for soldering my first pc. It was 8 bit intel 8080 based with 128k of ram and 2.5MHz clocking. I guess it still workable, just have to find it in mother’s home.

With this machine i tried 8080 asm, Basic, Fort.

Then, as professional, i used Pascal, C, Delphi, a few variants of SQL, C# and of course C++. As a junior i know Lua, JavaScript and last time have read a handbook of Python.

Most of all i like c++ and in don’t feel love to interpreted languages - because they are good way to make heatsink of your cpu hot ) But from 3 of them i know i like Lua - imho it’s most flexible and powerful of them and has excellent JIT. And it’s sad that it is much less popular.