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.
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.
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!
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.
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.
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.
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.
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.
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.
I don’t know how true it may or may not be that anyone could do programming, if motivated to do it. I will say that there are a subset of people who will grab hold of a programming problem and not let go until it’s solved. The people who have that drive tend to be really good because they are self-driven to make the code work the way it should.
I noticed the same pattern as you, @Geoffrey , when I took coding classes. The intro class was full, and most of the other students had glazed eyes looking for the “right” answer. At more advanced levels, the students seemed more focused and determined.
When interviewing for IT work, I always ask candidates what kind of IT tasks they perform on their own. The ones who tinker tend to be driven and for the most part, quite competent and able to learn. The ones who don’t may be OK, but are more likely to need constant prodding after they start working.
To the point, I think drive is more important than raw aptitude.
At my school the Intro to C++ was required for all engineers and engineering physicists. The later classes were mostly CS majors. So there might be more to that filtering.
I’ve found this to be especially true. More important than experience too (although with a lot of experience the person might be better equipped to manufacture their drive). I wish there was a good way to tell this from an interview.
In my experience, with my career and formal education far behind me, I’ve always felt that in any company employing more than a few programmers/engineers/scientists/etc… there are always “thoroughbreds” and there are “plowhorses”.
When I went to work with a major defense contractor after getting my degree, I became part of a large team of engineers/scientists, developing very large/complex systems for a very demanding customer. There were very specific, well-established, procedures dictated by both customer and contractor… contract specifications/requirements and, in addition, the company’s own written “guidelines and best practices”. The former were quite strict/rigid and there was no deviation without waiver… with the latter there was just a tiny bit of wiggle-room… for proven performers.
Typically, you started as an unproven participant, on a short leash, working on the “boilerplate” of a project… and, with time and experience, you proved to your peers and your bosses that you were capable of following directions, doing the work, and more. That, in turn, led to more “glamorous”/challenging assignments… working on the more advanced parts of a project, where your creative/artistic “bent” could be applied and appreciated to a greater degree. Initially you were perceived a “plowhorse” and put on a short leash… and then you rose to “thoroughbred” status and were given a longer leash as you continued to prove yourself capable of even more.
For many, if not most, of us older folks… this is/was a pretty typical progression. It was a process of time – shorter for some, longer for others… but a process of time nonetheless. There were relatively few true “thoroughbreds” who were lucky enough to be recognized as such and given opportunity to fully show their talent/creativity early-on in their career… the rest of us had to bide our time. This was a historically tried and true career path and only a relative few “short-circuited” it. I recognize, however, the times are changing and in our smaller, “connected” world, with the internet and all the online recruiting procedures, maybe it’s more possible than ever before.
A bit of both. Some can’t, some won’t. Some people just struggle to break down a large task into smaller steps I think.
Nope, cranky overworked programmer who ended up helping with hiring, because I got tried of working with people who couldn’t do the job they were hired to do, because the guy who was hiring them isn’t a programmer, and had no way of gauging their abilities.
I’ve learned to lower my expectations. I give people a quick test to see how they code, but the main purpose of it, is to see how security conscious they are. Over the years, that was one that most people didn’t seem to learn as they went. They could improve their programming abilities in general, but just would never get a grip on making sure stuff was secure. I think the main issue is that people get that you shouldn’t trust user input, but they don’t understand what all should be considered user input.
I don’t think that they should be able to, but I think it makes them a better programmer if they can. The only down side to it, is that then you work out everything in your head, and then you have the boring task if actually typing it out… and then it’s just not fun any more.
Maybe that’s where we differ on thinking anyone can program. Like I said above, some people just can’t seem to break down a large task into smaller steps, which is a required ability to be a programmer. Think about reaching out to grab something off your desk. Most people just think the task is “reach out and grab the thing”, but you have to break it down into smaller things. First you have to rotate your shoulder to lift your arm, then you have to pivot at your elbow to extend your hand out towards the object. Next you have to tell each of the joints of your fingers to open, then rotate your elbow again to drop your hand over the object, now instruct all the joints in your fingers to close to grasp the item, then back to the shoulder to lift the arm again, then back to the elbow to bring your hand back to you. When we actually do it, it’s just one step “1. Grab the object”, but when you have to program it to happen, there is much more to it.
You see, writing a code is not a first task of a programmer )
It’s usual case when you have work with code that had been written not by you. It can be code written by your colleague who seat aside you, it can be code written by a person who doesn’t more in the project, it can be code of third party library, etc. It can be even your own code that you was write a two years ago.
So most important thing here is reading. You read a code and at end could understand what it does. Like a simulation, isn’t is? Ideally if you can read it with near to complete understanding not too much slower then any other usual text. And during this process “mark with red marker” weak pieces.
Man. There’s a lot of information in this thread. I wish I had paid attention to it from the beginning.
I’m a systems engineer/AWS architect. My company made a switch to full microservices based code using AWS resources just over a year ago. A lot of engineers are doing OK with the switch, but we’ve had quite a big turn over with engineers that just don’t understand the difference of a microservices container vs a monolithic app.
On the infrastucture side, we’re running into having to teach systems engineers how to code. All our infrastructure is now being built in cloudformation, managed by bitbucket pipelines, and deployed through source control. The setting up of environments is scripted via user_data scripts and ansible commands.
I was lucky in that we had some turn over in the Linux side of the infrastructure team just before the switchover, so we were able to find systems engineers with good coding backgrounds. The Windows team wasn’t so lucky and are now struggling with a few legacy engineers that are just not coping well with the new job requirements.
I agree that programming is an art form just as much as engineering is. The ability to break a large task/job/design into it’s working parts is not something everyone can do. In art, it’s the ability to take a life form and break it into it’s basic circles/ovals/parts and then add detail until the line drawing is complete.
I did art growing up. Pencils, pastels, charcoal… those were the things I grabbed on road trips to keep myself busy in the car. I’m also a musician. Played in school and continue now with my church. All of these things I think help enable me to look at an issue from multiple sides to discover a proper outcome.
When we interview someone, I always ask what they do outside of work for fun. I’ve found that someone that has a lot of hobbies is eager to learn. I’m the same way. I like to dabble in everything. I might not be an expert at any one thing, but I can speak intelligently on a lot of subjects and provide examples of what I’ve done to support that information. Someone that spends all their time doing one thing, may be really good at that one thing, but might not do to well if they have to adapt. The on place where this doesn’t work out too well for me is unfortunately at work… I tend to get bored easily. My boss and I are constantly finding new projects for me to research/work on. Just doing the same coding all the time gets boring for me.
I think that’s a good enough start for me for this post.
I mean, everyone (almost) can play basketball though, but very few could be in the NBA. Everyone can bake, but very few could be professional pastry chefs.
Not that a professional software engineer is in the NBA, but the people in this thread have done 10,000 hours of programming, so they are at a different level than someone who’s just learning programming.
Anyone can learn the basics, and I think they should. Coming back to the drawing topic, how many art classes did you take in school (before college)? 10?
I just wish (and I acknowledge this is difficult and impractical) that everyone knew some programming. It just seems like the stigma of programming is that the wall is just too high to climb for everyone to be able to do it. People would have a better understanding of their world, and problem solving, and there would be more devices with a programming interface. It’s hard to imagine, but it seems like such a useful thing.
Generally, i’m agree. Like a many people can drive a car. Some of them do this as a job - drive a bus, cargo, taxi, etc. Very few could be racing pilots. And some people just couldn’t driving, so they are still pedestrians.
The only question is proportions of similar groups in programming science.
There is a game called Lightbot floating around on the net, might even be a mobile game now. It’s a good game to teach the basics. But I’ve still had a few people who couldn’t beat the levels that required using functions.
9 for me, no art classes in High School, so Kindergarten through 8th grade.