Skip to main content

Posts

Showing posts with the label Programming

Architecture Diagram for ...

ARCHITECTURE DIAGRAM representing interactions of your family of microservices is one of many important things to achieve the enterprise-level microservice architecture and microservices. After going through the design and contract definitions of your APIs/microservices, your team needs to put together a single diagram that explains the interaction among microservices (owned by your team) and how these microservices interact with other teams’ microservices. This is basically the blueprint for your team’s work and this picture needs to be constantly updated as you are evolving your services. What does this give you? It gives you the big picture view and it allows you to detect good or bad patterns that you cannot see when you are deep in your code. For example, you may be able to see that you are doing too many direct API calls for something that could be done with pub/sub approach. Almir Mustafic

Microservice Architecture, but NOT microservice mindset?

Microservice Architecture, but NOT microservice mindset? We are on the same team! Let's say we as a company decide to implement the microservice architecture and we also decide to split the teams into domains for each team to own a domain (group of microservices). You may be a member of team A and I may be a member of team B and we are all on the same ship. There is a water leak in your area of the ship, but my side of the ship looks good.  What do we do? Let's help out each other because we are all members/passengers on the same ship. We are all going to the same destination :) Microservice teams were created to pave domain boundaries at the architectural level, but it does not mean that we should create boundaries among members of different domain team members. Yes, the API contracts are definitions for how our services communicate, but for the sake of final destination, we need to tear down those boundaries when it comes to approaching each other for help and proacti...

Programming languages to teach students in high-school and university

Python-like or C-like as the language to introduce programming to students in high school and university? The question is: Do you introduce programming concepts to high-school/university students using languages that handle memory and other things for you or do you start introducing all of these concepts in languages like C that require you to understand all aspects. I will tell you what worked for me. I was introduced to programming in grade 10 using Basic programming language. There was a version called Better Basic and also Quick Basic. Then in grade 11 we learned procedural programming in a programming language called Turing (not Turing machine but a Pascal-like language developed by University of Toronto for teaching purposes). Then a year later, I started getting interested in C and C++. As you can see, I eased into the languages that introduced me to NULL exceptions and memory leaks :) With this approach I was not overwhelmed and this set up the foundation for a fun journey ...

Language of Software Engineers and scrum-master skills (quick thoughts)

Language of software engineers and skills of scrum-masters? All software developers speak the same language and that is pseudo-code :) However, there are still communication issues among software engineers specifically with other teams. That's where the role of great scrum-masters fits in. That great scrum-master does not necessarily need to be technical but he/she needs to have the skills of hearing roadblocks that engineers communicate in their technical language. I said "hearing" and hearing is not the same as listening. Listening is just a pre-requisite for hearing. Once you hear it, now you need to know how to action it and mobilize the right people. Coaching comes along with all of this, but that is a separate topic because it is also a responsibility of the tech manager. These skills separate great scrum-masters from others. Almir Mustafic P.S. Disclaimer: On any given day, I wear a hat of a solutions architect, engineer, scrum-master and tech manager.

NoSQL (some quick thoughts)

NoSQL? If you are developing your applications for real-time interactions using NoSQL, you still need to pay attention to your data structure even though your database does not enforce it. Your model classes in your choice of programming language are your contract because that NoSQL data has to eventually end up into some form of relational database when you decide to report on it. Almir Mustafic

Quick Thoughts — If Programming ~= Software Engineering ??

Programming is an act of giving a machine some instructions so it can perform things repeatedly. Software engineering is an act of programming and everything else that goes along with it in order to deliver enterprise software to production. Within software engineering, the more time you spend coding your applications and less worrying about DevOps things and processes, the better for you. Make sure you are heading in the right direction. In conclusion, if the act of software engineering was close to the act of programming, then you basically reached that ultimate point in developers’ eyes. Wasn’t the original goal of cloud computing to abstract things for developers so you can ideally only focus on writing code? Almir Mustafic

Quick Tip — Building layers of cake in Software Development world

Software Engineering — Building layers of the cake instead of slices of the cake. In software development you could go into separate rooms and build slices of a cake and combine it all into a single cake hoping to have a good cake. The following alternative is better. Build layers of the cake and that will naturally lead itself to early integrations, early visibility to software functionality from the product management and the end user point of view. Isn’t this what agility is all about? Almir Mustafic

Quick Tip — Design for Plan A or A+B

Design for Plan A or Plan A+B? Should you design your system with defensive Plan-B mindset or should you keep it simple thinking optimistically? I don’t think the answer is yes or no. I am talking about the case where you prefer plan A, but the confidence level is not there yet. I think you can design it clean and simple with with hooks in your code so you can harness or feature toggle the plan B functionality. If plan A is chosen then all you need to do is clean up the hooks for the harness or feature toggle that was not needed. Nothing to lose, but you need to have the discipline to clean the unnecessary code when the dust settles down. Thank you for reading. Almir Mustafic

NO Feature Branches in GitHub?

Imagine the world in which feature branches don’t exist. Imagine the world where you don’t delay your code integration (code merges) until 11th hour and you deal with it on daily basis. Imagine the world of just main trunk development in GitHub and development mindset and development capabilities that allow your teammates to see your code sooner rather than later. Pay me now or pay me later is what one of my friends has been saying. Yes, this goes against what everybody is doing out there, but it is worth exploring. It requires the right mindset and technical skills. It ultimately boils down to the following advice that I always give to fellow developers: * Regardless of what branch you are in, when you check in or commit your code changes, pretend that these changes will go into production right away. Then ask yourself a question if my code will negatively impact customers and will it change the customer experience if product team wasn’t intending to do so yet. If the answer to a...

Programming, Software Engineering and DevOps — Time spent on coding?

Software Engineering… Programming is an act of giving a machine some instructions so it can perform things repeatedly. Software engineering is an act of programming and everything else that goes along with it in order to deliver enterprise software to production. Within software engineering, the more time you spend coding your applications and less worrying about DevOps things and processes, the better for you. Make sure you are heading in the right direction. Let’s say you use a cloud platform to run your applications. The whole point of a cloud platform was to abstract things for developers in order to spend more time coding applications and less worrying about how to set up the resources in the cloud platform. So if you are hiring a lot of DevOps experts, then it means that the platform itself did not abstract the cloud enough. In conclusion if the act of software engineering is close to the act of programming, then you basically reached that ultimate point where your techn...

Linux Tip of the Day — Environment variables, bash script execution in the context of your command-line window

I had to remind myself about this as I worked on Unix/Linux platform a long time ago and having been in Microsoft shops for many years did not help either :) If you want your environment variables (being set up by another script) to be properly set up in the context of the window where you are running the script, you have to  run the script with a dot and a space in front of it  as shown in the screenshots below. Screenshot of vim editor showing you the content of setup.sh script: Executing the script in bash window and then verifying if an environment variable is set up: Thank you for reading. Almir Mustafic

Healthy To Learn Something Outside Your Box

When you have a problem to solve, what is the most typical way to approach it? Everybody is different, but most of us try to stay within our comfort zone because that’s what makes us feel more stable or more secure. We have one tool and we try to solve all the problems with that tool. When it comes to providing software solutions, you have to step a bit out of that comfort zone in order to innovate and in order to provide flexibility for someone else to innovate. I started my career in Unix/C++ software engineering world years ago. Then I switched to a Microsoft shop at the end of 90s. I’ve been in the Microsoft world ever since, but I’ve shown a bit of interest in other technologies that are from the open-source community. In last few years I started digging deeper into Python, Node.js, and recently back in Java area. I have not been doing this because I am unhappy with what Microsoft had to offer, but I am rather doing it because I want to explore and find out how the open-sou...

Self-Organizing Team — Is this possible? What happens to the tech lead role?

Teams ,  tech   leads ,  self - organization  and  responsibilities  are some of the keywords that I will use this in blog post. Most of this article is wishful thinking on my side, but I am being optimistic . Let me first ease into this topic by talking about the role of tech leads in the software engineering field. Be patient with me as this is all directly related to the main topic. I believe that the role of good tech leads is very often underestimated or taken for granted until they are removed from the equation and then you start realizing how much work goes into it. While the role of tech-lead is kind of stuck in between keeping project/program managers happy and working on low-level technical details, there are what I call unofficial/unwritten benefits of being a tech lead. You are in that special position as a leader where you are closest to all the activities on the floor and you can shape and improve things unofficially even though there a...

Python Programming Series — Factory Pattern - One Example

I have been doing software development for 18+ years, but I am relatively new to the open-source community. I learned a bit of  Python  back in 2013 and I put it on hold because I was not thrilled with the syntax and code readability as I am used to strongly-typed languages, and I just picked it up again because as I am going through some AWS training and AWS CloudFormation. If you are a Python expert, you should not be on this page :) As I am revisiting Python as a programming language, I figured I would post things as I am learning and putting together examples. That’s the point of this series. DETAILS ON THIS EXAMPLE ARE HERE: http://almirscorner.blogspot.com/p/python-factory-pattern-example.html Almir Mustafic

Programming / Software Engineering  — Think Paper, Paper, then Code

Most of the software engineering problems are solved in what I call the high-level brainstorming sessions. We basically walk into a meeting room and white-board our thoughts and come up with solutions. When things start falling apart, you better believe this happens in the last stretch of projects and it does work.  Now the issue is that we as programmers do NOT do the similar type of exercise before a line of code is written ? I typically see developers get requirements in the form of a document or a user story or in the form of walk-by requirements. The next thing I see on developers’ screens is code editors or IDEs. Is that the right thing to do? You may say that you are advanced enough and that you like to dive into coding right away, but this happens even to the best of us. We fall into this trap and rarely step back and review our habits. We have to go back to fundamentals. What did we do in school?  Professors taught us to write down our thoughts and to show what...

Great coder != Great software engineer

Great coder != Great software engineer How do you change that sign into an “=” sign? As a software engineer out of college, your initial goals are to get use to the professional working environment. Once you get passed that first hurdle, then it is all about the programming or coding skills. You want to improve your .NET C# skills or Java skills or NodeJS skills or Python skills or database skills. You want to learn the frameworks around these programming languages better and you want to learn different ways to optimize your code and apply different design patterns in your implementations. These are great skills to have and in a lot of cases required skills to have. The most important thing is that you are enjoying what you are doing. At this point you have reached that level that will give you the right to label yourself as a great coder or a great programmer. However, there is still more to go. At this time your main focus is programming and you may be lucky that ...

Do you want to get started with Python?

I have been doing software development for 19+ years, but I am relatively new to the open-source community. I learned a bit of   Python  back in 2013 and I put it on hold because I was not thrilled with the syntax and code readability as I am used to strongly-typed languages, and I picked it up again in last two years as there is something attractive about it. http://almirscorner.blogspot.com/2016/01/python-programming-series-getting.html If you are a Python expert, you should not be on this page :) Installing Python: https://www.python.org/downloads/ After installing, set the path and add: C:\Python27 NOTE: I have been running with version 2.7.x because that is still the most popular and widely used and has the biggest third-party library support. Python IDE that I like and it is most lightweight: https://www.jetbrains.com/pycharm/download/ NOTE: Install the Community edition. It is good enough. You can also use a cloud-based IDE:  http://c9...