|
If you send me a picture of yourself I'll start building your statue right away.
GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++* Weapons extension: ma- k++ F+2 X
If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver
When I was six, there were no ones and zeroes - only zeroes. And not all of them worked. -- Ravi Bhavnani
|
|
|
|
|
Pete O'Hanlon wrote: Marc's post has less to do with software engineering being dead and more to do with the cult of the script kiddies who seem to want to jump onto the latest shiny, rather than applying rigour and discipline to build and maintain systems.
Two sides of the same coin.
Pete O'Hanlon wrote: to allow the children to write a new Python based one, from scratch, simply because they have the CTO's ear.
The irony here is that because of hardware and browser hosting issues, Python got thrown out (I think) and it's being rewritten in F#.
More irony. Particularly since the only junior guy, while he has FP experience, has never used F# and I had to tell him "if you use the debugger, you'll see that your property assignment isn't working because you need to use the <- operator to make an assignment to a mutable structure, not the = operator.
Marc
|
|
|
|
|
You can't blame the "children" for that, they didn't make that decision. The CTO did. And calling them "children" is probably a little patronising, we were all young once.
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare
Home | LinkedIn | Google+ | Twitter
|
|
|
|
|
Basildane wrote: I've been a software engineer for 33 years and we are more busy now than ever before. It's insane we are so busy.
But that's point -- you're an engineer because you have 33 years of experience. But it seems that very few people, particularly (as Pete pointed out the motivation for my post) young script kiddies and CTO's that think they're programmers because they coerce a few open source projects to work together to build a website.
Colleges/universities don't seem to teach engineering skills, managers freak out when you write code that uses a publisher/subscriber pattern, and Agile (in the ways I've seen it implemented) doesn't give a sh*t about up front design.
Marc
|
|
|
|
|
Yeah.
Irony: My son is now at the script kiddie age (14). So, his mom and I set him up with a VMWare platform with hosts running Linux. No GUI's are allowed. He builds and hosts servers from command line only. One year on, he's kicking ass and has paying customers.
|
|
|
|
|
Basildane wrote: He builds and hosts servers from command line only. One year on, he's kicking ass and has paying customers.
That is awesome!
Marc
|
|
|
|
|
The techniques used to build a treehouse* don't work when building a cathedral nor vice versa. The same is true of IT - you need to know what type of a thing you are building before deciding what techniques to use.
Sadly in my experience in a very significant percentage of cases that first step is not taken. We decide the techniques to use based on factors external to what we are going to do with them - including external influencers (Gartner &c.) and existing experience.
I learnt database design (Codd's laws) and object oriented programming at college. This was a long time ago but I imagine things like MVVM would be in whatever has replaced my course.
Sadly I was also taught monolithic system design and it has taken me 2 decades to undo that.
* This is not meant to be pejorative - I'm just illustrating the point. Personally I prefer treehouses to cathedrals
|
|
|
|
|
Duncan Edwards Jones wrote: Sadly in my experience in a very significant percentage of cases that first step is not taken.
Indeed, it's what I'm seeing happen -- throw some code together, plug in some open source solutions, assume they work correctly, etc.
It's all driven by the "we need to get product out the door now."
Marc
|
|
|
|
|
The cult of "minimum viable product" strikes again.
I usually fall back on the argument - "If this were a medicine would you feel confident in taking it yourself? If this were an airline would you fly with it?"
(Again - if this is a treehouse type of project then the medicine is a placebo and the airline is a lego toy)
|
|
|
|
|
Engineering looks like a pile of sheets with a lot of poorly drawn correct diagrams, awesomely drawn wrong diagrams, scraped lines, hastily written and more hastily forgotten "illuminations". Followed by smaller and smaller piles of similar sheets of improved quality.
It's the most abstract and time consuming part, requiring focused meetings (not scrum, not at all) with the minimum necessary number of people and open minds - which means that after an hour everyone goes back to solo thinking and meet the next day.
The only engineering skill that I learnt in college is to be as rigorous and factual as possible. Record all the results of the experiments, all the intermediate results and the procedures used to obtain those intermediate results and the indexes used for the decisions. Everything else is experience and personal initiative - the first requires time ("it takes a year to make a year of experience"), the latter is a tract, you have it or you don't have it.
College also taught me methods to be factual and rigorous, in the form of Mathematical Analysis, Logic, Statistics and courses of Engineering - they are useful in that they make you design standard cases with the tools used to solve them the first time and then explaining how they were solved in the first place. Basically they are history classes on engineering matters.
As for design patterns I have some trouble with the term because I have a colleague (self-taught) who misuses them on regular basis because deep down he does not understande them and makes things harder for everyone else. Then reasoning on the real meaning of the term I recognize that I use them as well, because THEY WORK, even if usaully in my team we prefer reinventing the wheel. We do embedded highly customized systems so it's usually the saner thing to do - standard components or pre-cooked desgin patterns never worked for us in the past 25 years.
GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++* Weapons extension: ma- k++ F+2 X
If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver
When I was six, there were no ones and zeroes - only zeroes. And not all of them worked. -- Ravi Bhavnani
|
|
|
|
|
Marc Clifton wrote: how do you practice it in, well, practical terms? Someone assigns tasks during a sprint.
Marc Clifton wrote: for those with some level of college degree, did college teach you engineering skills Schools are there to make sure you become obedient, not to convey knowledge.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Quote: Schools are there to make sure you become obedient, not to convey knowledge.
Exactly. That's why we home-school.
|
|
|
|
|
I would contend that colleges are designed to teach problem solving, in general. They are a way of transitioning from the "rigid tell me what to do" of public high schools to the "you're on your own" mentality of modern business. Some are able to put those pieces together themselves without college. Some will never understand where to start solving a problem no matter how long they might be in school. For most, however, college guides the graduates to become self-motivating and, more importantly, self-sufficient.
I would agree, and argue that it is a positive thing, that colleges do not teach what businesses want. Such information is transitory while the skills that college teaches are permanent.
|
|
|
|
|
As a member of the BCS over here in the UK I remember attending a seminar from a software engineer from the Ministry of Defence who was involved in the development of avionics and navigation software for their jets. And it was eye opening exercise. I had no idea development teams actually used things like Z (the formal programming language) in practice. The level of discipline was far beyond anything I had encountered in real life. Their procedures were extremely disciplined.
The key point is that engineering is a set of rigorous disciplines used to build applications. The level to which we employ these disciplines depends on the goals, costs and risks. It takes time, effort, cost and skill to build these sorts of systems. You therefore need to weigh these against the goals. Obviously in avionics, a software bug can lead to a fatality so higher levels of engineering discipline are required than for say a web site.
I graduated with a degree in Computer Studies nearly two decades ago where I was taught software design, Z, formal methods, computational mathematics, data structures etc. All of these can be thought of as engineering disciplines.
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare
Home | LinkedIn | Google+ | Twitter
|
|
|
|
|
Great response. Thank you!
Marc
|
|
|
|
|
Dominic Burford wrote: I had no idea development teams actually used things like Z God!
You've just brought back such horrible memories!
Working for the MoD, that was great -- we had access to any mess we wanted, for our meals (the chiefs and POs' ended up as the favourite, except on Fridays, which was officers' mess all the way).
But Z!
Logic, my @rse! It has to be the stupidest and most unintuitive way in the world to organise data structures, et al.
I wanna be a eunuchs developer! Pass me a bread knife!
|
|
|
|
|
Mark_Wallace wrote: It has to be the stupidest and most unintuitive way in the world to organise data structures, et al. But.......it is mathematically provable, and that's the point. I must admit I found Z to be intuitive as it aligns with mathematics.
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare
Home | LinkedIn | Google+ | Twitter
|
|
|
|
|
Hey, I don't need mathematical proof that a light switch works to enable me to switch on the light.
If you want people to find creative solutions to problems, it's better to abstract them well away from the world of Z -- but that's probably why the military likes it; "creative" is a bad word, in the military (with good reason, though. Following "The Book" is much less likely to get you and your mates killed).
I wanna be a eunuchs developer! Pass me a bread knife!
|
|
|
|
|
Also, I would add that a lot of what is portrayed as "software engineering" practice is, in fact, project management. Agile v Waterfall v whatever is all about how you get teams to work together on software and nothing about how you get software to work.
Many of our industry failings are human failings - but sadly we persist in trying to find technological solutions for them.
|
|
|
|
|
Duncan Edwards Jones wrote: a lot of what is portrayed as "software engineering" practice is, in fact, project management. Agile v Waterfall v whatever is all about how you get teams to work together on software and nothing about how you get software to work.
Great point!
Marc
|
|
|
|
|
Marc Clifton wrote: I'm also curious, for those with some level of college degree, did college teach you engineering skills, or did you learn them yourself or on the job? I only consider 8 or 9 subjects (from over 40) that teached me something that have been really usefull and have been using a while in work life.
At the beginning I was trying to learn a lot of stuff and got overwhelmed. Was never happy with my results and eventually got demotivated. After a time and one sommer job as electical monteaur I changed my mind and started paying way more attention to (what others already mentioned) the methodes and less to the concrete contents. I experienced an increase of my confidence and I started to feel good with it. Later on I just learned specifics enough to pass the exam. I don't remember 90% of the formulas and other concrete staff, but give me a problem of the lessons, a book related or the internet and I will be solving it after a while.
So as conclusion I would say: The most important lesson I got from college was... to learn how to learn. The rest came with job / life experience.
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
Rating helpful answers is nice, but saying thanks can be even nicer.
|
|
|
|
|
Nelek wrote: to learn how to learn. The rest came with job / life experience.
Same here.
Marc
|
|
|
|
|
Nelek wrote: So as conclusion I would say: The most important lesson I got from college was... to learn how to learn. The rest came with job / life experience.
Well stated; you have succinctly described the true purpose of college.
|
|
|
|
|
Thanks
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
Rating helpful answers is nice, but saying thanks can be even nicer.
|
|
|
|
|
- Gathering customer requirements
- Software Architecture
- Support concepts (logging, builtin-help etc.)
All that and many more are software engineering, and in some terms even Usability Engineering (at least part of it) could count in as being a part of Software Engineering.
|
|
|
|