The mind of a programmer

New Home Forum Random or Off Topic The mind of a programmer

This topic contains 39 replies, has 13 voices, and was last updated by  Don 3 weeks, 6 days ago.

Viewing 30 posts - 1 through 30 (of 40 total)
  • Author
    Posts
  • #89754

    Jeffeb3
    Participant

    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).

    #89756

    Ryan
    Keymaster

    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.

    #89781

    Guffy
    Participant

    Should you have strong legs to be a postman? )

    Something like that

    #89933

    Don
    Participant

    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.

    #89941

    Jamie
    Participant

    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.  🙂

    #89960

    Jeffeb3
    Participant

    “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.

    #89970

    Ryan
    Keymaster

    Anyone can learn to program (and should

    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.

    Except chemistry. I don’t enjoy chemistry.

    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.

    #89972

    Geoffrey
    Participant

    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.

    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.

    #89973

    Ryan
    Keymaster

    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 user thanked author for this post.
    #89974

    Jeffeb3
    Participant

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

    “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.

    #89976

    Bill
    Participant

    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. 🙂

    (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.)

    #89985

    Aaryn
    Participant

    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 user thanked author for this post.
    #90057

    MegaDad3D
    Participant


    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.

    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…

    #90059

    Dakota Jim
    Participant

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

    1 user thanked author for this post.
    #90060

    MegaDad3D
    Participant

    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.

    #90069

    Jeffeb3
    Participant

    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.

    Aha! That’s a good strategy!

    it’s more efficient to create the code, run it, and fix it in quick iterations.

    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).

    #90081

    Don
    Participant

    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 user thanked author for this post.
    #90085

    Jeffeb3
    Participant

    And maybe 99% of people can learn to program, but I’ve met some of the 1% that can’t.

    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.

    #90098

    Guffy
    Participant

    HR detected in the thread! 😉

    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.

    #90100

    Guffy
    Participant

    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.

    #90125

    Jeffeb3
    Participant

    HR detected in the thread! 😉

    Those are fighting words!

    There is a difference between everyone should learn to program and everyone should be a senior developer. I have worked with my fair share of people who could not do their job.

    In autonomous vehicles, we get a lot of, “I know how to write C++, I know how to drive. I should be able to write C++ to drive!”. But there’s a lot of math and a lot of techniques that you need to know well to be successful.

    I just think part of the computer experience should be programming. It’s treated as such a wall you meed to climb.

    #90143

    Guffy
    Participant

    I think when we talk about “The mind of a programmer” and meaning somebody who is just hobbyist in that it’s one thing.
    Whenever we talk about someone who pay money (directly or indirectly \pay for university\) for a course to study programming to be professional programmer – it’s different thing. In business it’s stronger requirements. Nobody will pay you good money for a long time if he realized that you aren’t talented.

    anyway, average power user meet programming nowadays even if he doesn’t realize that he makes a program. Like the Tasker application on android.

    #90144

    Guffy
    Participant

    Those are fighting words!

    I did not mean to hurt Don. it’s normal joke between programmers and HR here on our forums

    #90153

    dkj4linux
    Participant

    (.. 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.)

    Navy-trained electronics tech in the late 60’s, I went back to university to get a EE degree a couple of years after discharge. First programming class, exactly that… FORTRAN and punch cards. Spent MUCH more late-night time in the over-crowded computer center than the class was actually worth, hour-wise… probably more than any other class I ever took!

    #90156

    Aaryn
    Participant

    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.

    I both agree and disagree with you on your opinion of “programming is manufacturing.”

    I do believe that “Programming is Manufacturing” but the product produced is the result of the “process used to create it.”  If you think about it you will see that is true of everything.  Every single result you get in the world is the result of the process that created it.  In a tight spec manufacturing plant they will rely on machines to create repeatable results.  In an ice cream shop they will have have rules and processes in place to deliver a consistent product.  Same is even true with relationships.  If you follow a good process the relationship will grow. If you follow a process that is more selfish and self centered that relationship will suffer.

    If you ever find you don’t like the results then you need to figure out how to change the process that created the results.

    Now for the tricky part.  This is where I say I agree with you Guffy.  People are often the weak link in the process.  They either don’t follow the rules or the best practices.  They may do it intentionally or not.  If the people can’t be trained to follow the process then they should be replaced.  Having programmers that don’t fit well into the current process will cause problems.

    I will use myself for example.  I understand many of the programming concepts.  I understand how to write the Syntax and how to create programs from scratch.  But If I am not given clear guidelines on what to work on and what not to work on I will waste time trying to make the code more efficient or easier to read.  Basically I would get the job done but slowly.  That isn’t a great fit for an environment that needs to get out a rapid prototype. So I wouldn’t fit that process without several guidelines to follow.

    I started my career as a programmer.  I moved to SQL database development and administration and now I am in more of a DevOps role.  I work for a manufacturing plant in Colorado.  I have learned that I can have my team program the best tools in the world but if the Process isn’t well established it won’t matter.  If I want to make a change that will save the company a ton of money I first need to get the people to see the problem.  Get them to want to make a change.  Get them to agree on specific change(s).  Get the tools built and put into place.  Get the people to use the tools as part of the new process.  And the hardest part… Keep them following the new process without falling back into old habits. Sometimes I have to replace tools, machines or people who can’t conform to the process.  But when the process is followed the results are excellent, predictable.

    I firmly believe programming is the same way.  In that case your most variable “tools” in the process are the people.  So I guess I am saying I agree with what your concept but I am changing the wording to fit my own definitions.

    #90170

    Guffy
    Participant

    I meant that the Process isn’t panacea. I a big project you have all these things – sprints, meetings, qa team, devops, tickets, git, wiki like documentation, releases, delivery, etc. Some of them even useful 😉

    But all those things belongs to manufacturing nature of a project can’t save it from crash if you have problems in creative part, art part. Bad idea, wrong design, mistake in choosing underlaying technology and/or third party library(ies). So creativity and a talent is basis, imho.

    Good software architect must be able imagine entire system that he design in his mind. And should be free to explain it in any level of abstraction. Best case if he able to coding own design.

    Good developer should be able to imagine how the code will work. Be able to simulate it in his mind. And predict any side effects of his change that could affect various areas of the application.

    #90173

    Bill
    Participant

    But If I am not given clear guidelines on what to work on and what not to work on I will waste time trying to make the code more efficient or easier to read. Basically I would get the job done but slowly.

    The HR people at Intel explained to me the differences between different job classifications when I doing the manager thing. Some employees you hire to follow orders very specifically, some you hire to get the job done, some you hire to get the job done as an integrated element of the overall scheme, some you hire to generate the schema. You pay each of those types differently. 🙂

    #90180

    Jeffeb3
    Participant

    I find it very frustrating to work with people who need exact specifications before starting work. I like to work in an environment where I’m trusted to understand the problem and create solutions that work.

    I don’t follow orders well, and I don’t describe solutions well enough to just blindly follow.

    That might be the unique position for me, to not only have found a place where that works, but be able to excel at it.

    The worst thing you can do is take people who can be given broad instructions and give them very specific ones. It’s so painful.

    The second worst thing you can do is hire someone who is used to writing unit tests to requirements and writing code to unit tests, and ask them to solve a problem. That’s also painful.

    In my first task out of college, I was given a research problem (make a real time perception algorithm to detect unmarked roads and follow them), and asked to solve it, and there wasn’t a follow up conversation about it for 3 months. This would make many people crazy and it’s very abnormal. I’ve since tried to get back to that as often as I can. It’s not for everyone though. Some people would prefer to come in on Monday morning, have a scrum, be given a list of things to fix, and start fixing them until lunch time.

    #90188

    Guffy
    Participant

    he he. one of the most painful and boring thing is when you have to explain a task 5 times, awnswer a lot of qestions and after you will see the result you realize that you have to rewrite it from scratch by yourself. and the guy is just “a good man” that other people had been enforced you to take from aside project without any tests just because his project was ended.

    #90220

    Geoffrey
    Participant

    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.

    I have to agree with some of this, some people just aren’t built for thinking like a machine that blindly follows instructions regardless of how stupid those instructions may be.  On the flip side, many just decide that it’s not what they want to do with their lives after a little exposure.

    For example:

    When I was in school, Computer Science 100 was taught in an auditorium sized classroom and it was full every semester.  CS210 was taught in a big room still but the group thinned out considerably.  100 was intro to programming (C++ at the time) 210 was advanced programming.  By the 3rd course in the natural progression, 225, Assembly Programming, there were about 20 of us left.  I’m not saying that those who dropped out of the program weren’t ABLE to understand the concepts, they just didn’t have the passion to understand the real 1s and 0s of what was going on.  I on the other hand got fired up by understanding how the machine really did math!  I actually used to do long division in binary to pass the time in my Sociology class…

    So I wouldn’t say that EVERYONE can do it, but I’d say that most can, but few have the passion to do it well.

    </soapbox>

Viewing 30 posts - 1 through 30 (of 40 total)

You must be logged in to reply to this topic.