|
Quote: Nice. I subscribe to your blog, thus I am notified when you post something new. Keep it coming. Ah you're the one
Glad you enjoy my posts.
I've been looking at DDD for a while now, and can definitely see its value. It's not a design pattern or design methodology, it's a way of modelling your software so that its a true reflection of what the domain behaviour. You develop software in conjunction with domain experts. You share a common language to ease common understanding. Your software should be easily understood by anyone with similar level of domain knowledge.
The good thing about DDD is that it doesn't require any new tools or technologies, just a different approach to designing your software.
I'd definitely recommend looking into DDD and see what benefits it can bring to your next project
"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
|
|
|
|
|
There is a well known story that about a woodcutter who stops periodically to sharpen his axe will. This woodcutter cuts down more wood than the other woodcutter who doesn't. By periodically sharpening his axe, the woodcutter is more productive than those that keep on cutting without stopping, as eventually their axes become blunted over time and they become less efficient.
A similar analogy can be made with software development. The analogy being that the developer who periodically stops writing code to research new ideas will be more productive than the developer who doesn't.
There are many ways of keeping your skills up-to-date. Here are just a few.
- Reading articles
- Writing articles (if you understand it well enough to describe it, then you understand it)
- Contributing to communities, forums, open-source projects etc
- Using social media to keep abreast of what's happening e.g. Twitter is great for this
It's important that it doesn't become a chore. Keep it fun and you'll keep doing it. I try to spend a little time each evening reading around various articles that I find on Twitter. I also enjoy wrtiting technical articles. Not only do I enjoy the warm fuzzy feeling of passing on my knowledge to
others, but it also forces me to research a subject and thus increase my knowledge.
Keep it fun and make it a regular part of your daily routine.
Remember.....keep your axe sharp
"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
|
|
|
|
|
Agreed.
Doctors and nurses have to keep their skill set up-to-date as well.
|
|
|
|
|
Absolutely, many other professions need to keep their skills up to date. Sometimes this is a professional requirement as it is with medicine.
"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
|
|
|
|
|
Following on from Truths about software development Part I[^] and Truths about software development Part II[^]
1. If I had a pound (dollar) for every time I heard the phrases "How long will it take" or "How much will it cost" I'd be a very rich man. Good job I'm not waiting to hear the phrase "How about the quality"
2. You will always think of a better solution to the problem you resolved 5 minutes after it gets released to the customer
3. You look at code you wrote just last week and wonder what the hell you were thinking
4. There is always that one developer who writes awful code no matter how much time they have to write it
5. No matter how much effort you put into staying current you'll always be asked about that one technology you haven't got round to looking at yet
"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
|
|
|
|
|
|
I think there is a subtle difference between staying current and improving your knowledge. Admittedly both allow you to gain new skills and / or knowledge, but whereas one builds on your already existing knowledge, the other brings you new knowledge.
For example, I have read Eric Evans's excellent book on Domain-Driven-Design recently, and it made me look at software development and architecture in a whole new light. That was improving my current knowledge because it built on top of my already existing design and architectural knowledge. I have also recently been learning Node.js, which is staying current, as I am new to Node.js and don't have any previous knowledge to build upon.
It's important to keep building upon your existing knowledge, as well generating new knowledge. Good software developers need to do both.
"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
|
|
|
|
|
Reading this article[^] got me thinking about what does it mean to be a senior developer? For me, seniority equates to knowledge, and is not related to the number of years experience you have. If you have worked for the same company working on the same product for 10 years and not made any particular impact on the team, does that make you more senior to someone who has worked for 5 years but has been exposed to a greater number of technologies, methodologies and constantly brings new ideas to the table?
In my opinion, it does not. Seniority is about the depth and breadth of your skill set. You may have 10 years of commercial software development under your belt, but if you don't understand architecture, design patterns and SOLID principles for example, then how can you possibly call yourself a senior developer.
This is where the T-shaped individual[^] comes in. For those that haven't heard of the expression, it relates to an individual who has both deep experience in a certain area, but also has a wide breadth of knowledge across the entire discipline. So for example, if you have a deep knowledge of web development with ASP.NET then you have deep experience of a particular technology. To be T-shaped you would need to complement that with knowledge of a wider (broader) set of skills such as (for example) architecture, design patterns and SOLID principles. The wider (broader) your skills, the more easily you can pick up new ideas.
Being a whizz web developer is all well and good, but if you can't pick up new ideas and skills as you lack the surrounding context and interrelated disciplines, then that makes you a one-trick pony. Good for one specific thing, but not a lot else.
The wider and deeper your skills the more T-shaped you are, therefore the more value you add to the business.
"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
|
|
|
|
|
In light of the recent Volkswagen emissions scandal[^], it has been reported that the smart software that is loaded into the Volkswagen cars was responsible for the cars deliberately reducing their emissions when under test conditions. This calls into question the ethics of the software engineers who were responsible for making such changes to the software. They deliberately and knowingly subjugated the software so that it would return misleading results when under test conditions, and thus give false and invalid readings.
I have written about ethics in our profession previously[^] To be considered a profession we need to act like professionals.
It almost goes without saying that you expect this kind of underhand behaviour from boardroom CEOs and their kin, but this is unexpected behaviour from our industry. They were complicit in the scandal that is now facing their employer. They quite simply have no excuse for what they did.
They must surely have known what they were doing was wrong, but went ahead anyway. Saying they were under orders to make the necessary changes is no excuse either (the Auschwitz defense). Maybe if they had taken a stand and refused to make the changes to the software that was asked of them, this whole sorry mess could have been avoided.
"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
|
|
|
|
|
They clearly hadn't read this: https://www.acm.org/about/se-code[^].
But I wonder what most of us would do if put in that position? If asked to do something ethically dubious, would we put our jobs on the line and refuse to participate? That could be the subject of an interesting (and anonymous) survey.
|
|
|
|
|
I don't think the issue of ethics in our profession is discussed enough, and the current events at Volkswagen are a sorry testament to that.
Whilst some may fear losing their jobs, which I fully understand, I wonder how many will lose their jobs anyway as Volkswagen seek to pay the substantial costs that this has incurred (into the billions by all accounts). I also wonder why there wasn't a whistleblower. Even if I opted to stay for fear of losing my job, I would certainly not want to remain complicit. I would seek to become a whistleblower and inform the necessary authorities.
By all accounts, this is a sad testament to our profession.
"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
|
|
|
|
|
How easy to say in your shoes. What is the alternative ? Cancel a $300,000,000 engine development due to bad emission tests that you can workaround with twenty lines of code ? If you intend to do that, please film yourself announcing your steering committee that you will not make the change, and send me the video. And also film yourself while trying to find another job, because nobody will hire you anymore after such a move.
Plus this is daily stuff in the car industry : entire development departments must "bend" test results so that the final product match specifications. Do not blame the people, blame the system. All car manufacturers, tier-1 or tier-2 or tier-3 are cheating on some of their figures and results. Changing software is cheap, changing hardware is expensive, this is reality.
Do not get me wrong : I do not think this is good, and that one case in a billion now lead to a "scandal" is good, but this is peanuts compared to other things going on in the car industry, in the pharma industry, in the finance, etc...
Also do not assume people that made the software were fully aware of what would be done with the code : I can ask tomorrow an external company to write a software for a prototype that would block the steering wheel when a sensed temperature goes below zero, the day after tomorrow another company to write a software for a prototype that sets the temperature value of the sensor to -50°C if you hit the brake, and combine the two in a series software that would bring you right in the wall everytime you hit your brakes.
|
|
|
|
|
This had nothing to do with innovation or development, but everything to do with deliberately subjugating the rules governing the levels of emissions that are legally allowed. This was not some minor point of detail, but a deliberate attempt to sabotage the test results across an entire continent.
Ignorance is not an excuse for what happened.
We will agree to disagree.
"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
|
|
|
|
|
Dominic Burford wrote: This was not some minor point of detail
Exactly my point : Compared to everything that is being made, this one is for sure one point of detail.
Now, since you are not part of the industry, and therefore are not aware of what is usually being done there, it appears to you as something unbelievable.
Do not judge too quickly, and do not underestimate the importance of the context.
|
|
|
|
|
VW as a company put profit before the safety of the general public. Air pollution is a growing problem globally, and cars are a major contributing factor in that pollutions. The development team who rigged the software on the cars to give misleading results under test conditions did so knowingly and were therefore complicit.
Ethics and integrity were absent during this entire sorry episode. From the top all the way to the bottom.
I personally can find no mitigating circumstances to any of this whatsoever.
As I said before, we will agree to disagree.
"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
|
|
|
|
|
Dominic Burford wrote: The development team
You are talking about several hundreds of people here, spread worldwide, in different companies, not just two developers sitting at a desk.
Dominic Burford wrote: I personally can find no mitigating circumstances to any of this whatsoever
Yes, because you choose to ignore context and reality, and because you judge people from what you have heard in the news. I would agree with you if we were living in an idealistic world, but life is not black and white, and this case is far more complicated than just "OK, they decided to cheat at a large scale, this is unethical".
I find it awesome that you are defending ethics and integrity in a world that has never lacked them more, with tendency growing. IMHO, you should be less categorical in your positions to gain credibility : evangelism serves no purposes.
|
|
|
|
|
Like I said, we have different positions on this. You are making the assumption that yours is the only one, and that makes you fail to see or appreciate other positions on the matter.
I take a stand for ethics and inegrity in both my professional and personal life. I champion and campaign for social justice and equality in many aspects of my life. The fact that the rest of the world may be lacking in such things is precisely why I take the stand I do.
I do not think it me who is being naive or categorical on the issue.
As I have said (twice) before. We will agree to disagree.
"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
|
|
|
|
|
Dominic Burford wrote: I champion and campaign for social justice and equality in many aspects of my life
Dominic Burford wrote: We will agree to disagree
To me, this does not fit go together. Either you campaign, and then bring arguments to defend a cause and get people to side your opinions, or you simply have a view on something and disagree with everybody else, which is not really campaigning.
Do not get me wrong : I am not trying to start "yet another fight" on the internet[^], it is just that I have been trying to explain why this happened and why nobody was shocked about it in a given context; this does not mean that what has been done was good (which I have already said twice), only that your target, namely the SW development, is IMO the wrong target. In one of the earlier post, you seemed to be surprised a company put profit above all, this is to me a very naive approach of the world -> give me only one example of a big company that is putting something upon making profit ? Again, I do not think this is good, put blending it out because we do not want it to be there is a curious way to go.
|
|
|
|
|
To chamption something is not the same as getting into a discussion of an issue when the other person refuses to see that there may be other ways of looking at the issue. We all look at the world through our own lens of perception. That is what makes us all different and unique.
You have taken my earlier statement out of context. I stated that VW placed profit above the health of the general population by deliberately increasing air pollution, which as we know is a major contributor to many illnesses and diseases. Even by the standards of a billion dollar corporation, that's taking things too far. We all know that profit is king in the capitalist world, but few would be so unscrupulous as to place human health at risk.
You are free to mitigate or defend VW's actions all you wish, I have absolutely no problem with that, just don't expect everyone to agree with you.
"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
|
|
|
|
|
Dominic Burford wrote: You are free to mitigate or defend VW's actions all you wish, I have absolutely no problem with that, just don't expect everyone to agree with you
I have no particular interest in defending VW. Actually, I am not defending VW at all, I am defending the SW developers that you seem to want to be held responsible for what happened.
Dominic Burford wrote: but few would be so unscrupulous as to place human health at risk
But for China or the United States, which have been doing and organising it for ages at a nation level, and not the smallest of all, are laughing at everybody when speaking from environment and global warming, but now want to make a fuss about some falsified emission tests. Excuse me if I do not understand why the VW story is making such a fuss and why the rest is ignored.
|
|
|
|
|
Quote: I am defending the SW developers that you seem to want to be held responsible for what happened. People are accountable for their actions, and so by extension are the software developers who rigged the VW software in their cars.
Quote: Excuse me if I do not understand why the VW story is making such a fuss and why the rest is ignored I agree that more fuss should be heeded to global pollution. But then the energy companies have the government in their pockets, and that's an entirely different issue.
I'm going home soon. I've really enjoyed this exchange of views, and I hope we both have learned something from it. Have a great weekend
"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
|
|
|
|
|
Quote: Contrary to what it may sound like, NativeScript is not a programming language – in fact, it simply uses languages you may already know: JavaScript, CSS and XML. NativeScript is a framework for building cross-platform truly native mobile apps with JavaScript! This Javascript framework[^] looks interesting. Not only has it got good integration with the Visual Studio ecosystem, but it is capable of creating cross platform mobile applications. Built around Javascript, XML and CSS, the tooling should be familiar to any web developer.Quote:
The NativeScript promise is simple – you can build truly native cross-platform apps with a single codebase of JavaScript, XML and CSS. NativeScript offers plenty of tooling for the Visual Studio developer – everything from building the app, to testing and deployment. Don’t like JavaScript? Fine, you get to write your app business logic with TypeScript. Choice for developers is a good thing, and .NET developers get plenty of love in NativeScript .
"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
|
|
|
|
|
Just finished reading this excellent book[^] on functional programming with Javascript. I've read various articles before on the same topic, but it's nice to have a book to give you the full detailed picture of the subject. This was a great book, full of useful explanations and examples. Unlike some books that try to make the case for using Javascript in a purely functional manner, this book is more practical, and makes the case for using Javascript in a functional manner alongside your non functional Javascript, therefore making the book appeal to every Javascipt developer, not just academics.
Javascript makes an excellent functional programming language. It supports functions as first class objects whereby they are treated as any other object by the language. They can be assigned to variables, passed to other functions and returned from functions. Javascript also supports higher order functions. These are functions that take a function as an argument and return a function. Higher order functions should not have any side effects or rely on the environment in any way.
Learning functional programming with Javascript is definitely worth the effort. By adopting a functional approach you can make your code cleaner, more modular, increase its reusability, reduce its coupling and can be sure that it is mathematically correct. Programming in a functional manner can also lead to useful abstractions. By passing functions as parameters to other functions you can harness the power of callbacks, which underpin reactive and asynchronous programming.
Even if you only use Javascript for client side validation on your web controls, learning functional programming will not do you any harm whatsoever. Quite the opposite in fact.
"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
|
|
|
|
|
I have long been involved in Software Configuration Management (SCM). Since 2000 I have been involved in SCM at various companies I have worked for. I find this an interesting and challenging part of the software development process. It doesn't matter how clever, impressive or jaw droppingly awesome the code we write might be, if it isn't versioned, built and deployed correctly then all that hard work is for nothing.
In software engineering, SCM is concerned with tracking and controlling changes to the software. As such it is concerned with the following goals:
- Configuration control - impementing a controlled change process
- Version control - managing changes to the source code and programs comprising the application(s)
- Build management - managing the process and tools for building the software
When I initially became involved in SCM the tools I used were quite rudimentary. They consisted of command-line tools and scripts that connected to version-control-systems (VCS) such as Source-Safe to fetch the code, build the application and then deploy this to a file share on the network. They were triggered manually (usually by a member of the testing team). Whilst this all may sound very basic (and it was all very basic) the underpinning fundamentals of today's Continuous Integration (CI) and Continuous Delivery (CD) platforms are not much different. The key differences I have seen are the levels of automation, flexibility and integration in SCM tooling nowadays. It is now possible to do far more with less effort in less time.
My first steps into CI and CD came in the form of Cruisecontrol.NET in conjunction with Nant build scripts using Subversion as the VCS. This brought whole new levels of sophistication to SCM. Now whenever a developer checked in their code to the VCS, it would automatically trigger a build, which in turn which in turn could be deployed to a staging server. The build process could run unit tests against the code to ensure code coverage and that the latest check-in had not inadvertently broken something. The power and flexibility of build specific scripting tools such as Nant are staggering. There is almost no limit to what it can't do. On the CD side, these can be manually triggered by testers on an ad hoc basis. However, with the rise of Infrastructure-as-a-Service (IaaS) and Platform-as-a-Service (PaaS) cloud environments, it is also entirely possible to deploy your newly built application to the cloud (for example Azure) for testing. You are only required to pay for what you actually use, so you only pay for the testing environment when it is actually in use by the testing team.
SCM is now an integral part of the software development process, and not something that runs alongside external to it. SCM is integral to today's software development process. With the rise of Agile and Agile based methodologies such as SCRUM and LEAN, SCM has seen many developments, particuarly where Continuous Integration and Continuous Delivery are concerned. Agile based methodologies rely on this level of SCM sophistication. With the right tools and infrastructure in place, there is almost nothing your SCM cannot do.
I have setup and configured entire CI and CD environments from scratch. This has included the already mentioned CruiseControl.NET and Nant (using Subversion), and more recently with TeamCity and MSBUILD (using Team Foundation Server). All of these are a far cry from the tools that got me started.
Althought the tooling that surrounds SCM may have changed, bringing whole new levels of sophistication to the software development process, it is reassuring to know that beneath all of this tooling the same core principles still hold true. Version control and build management are fundamentally unchanged in their core outcomes and processes.
"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
|
|
|
|
|
Microsoft have developed an open source web browser built with HTML, CSS and JavaScript as a Windows app on the Windows 10 platform. The full source code is on Github[^].
The new open source browser is intended to highlight the new browser rendering engine that ships with Microsoft Edge called EdgeHTML, which is what powers their new browser in Windows 10. To show how the new EdgeHTML engine can be used by developers, they have released an open source project demonstrating its use. This project is called Javascript Browser.
"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
|
|
|
|
|