First 250 days of software dev - Part 9

12 min read

Day 81

For the first time, I approached a design that I thought was responsive from my point of view. When it comes to CSS, it feels a bit like magic, even though I know it will give the desired output as long as the rules are followed. The topics we talked about in the meeting today made me think about some issues again and think about some problems from different angles. And I really didn't realize how time was passing and how much time had passed. Towards the end of the day, I looked at different CSS examples again. For example, I didn't know that there are online formatters that convert SCSS to CSS. Many beautiful designs on Codepen used SCSS, but I was skipping them directly, not using them and not examining them carefully. Now I've learned a shortcut for it too if it will be useful to me. Today was mostly spent trying to improve the design and researching similar topics and examples.

Day 82

Today was also spent with CSS. I mostly thought about what I could do differently. Sometimes I wanted to apply the parts that look good in different designs, but I couldn't achieve that good look. In the first design, I tried to produce a unique and simple content as much as I could (of course, there are many examples in many places, but it may look like this when you look at it as a whole). The second design is still at this stage towards the end of the day: "Drawing sketches in a notebook". If the goal was just to be fast, it could be done with very little thought. If the goal was to create a perfect look, it would take a long time but a pretty good design could be created. But I think the goal is to keep the balance. So the trade-off between time and quality is a natural one. And I attribute your asking us for a second design to two things: you want us to do better or you want us to look at it from different angles. And I want to come up with something based on both conclusions.

I did two things after working hours: I saw the country's economy, the agenda, the topics people were talking about and got depressed. Then I continued reading the algorithm book where I left off. I am still at the very beginning of the book. I saw the multiplication algorithms developed centuries ago by the Arabs and later by the Russians. Tomorrow I will see what Karatsuba's multiplication algorithm is in the evening. This week I aim to finish the simple algorithms in the introduction part of the book. If it is done quickly, I will continue with the second part (I think I will pass and keep moving forward). I realized something interesting: In the Egyptian number system, there are numbers "1,10,100,1000, even 1 million". I thought, what could the Egyptians have done in their time to use 1,000,000? Of course, they were very advanced in areas such as pyramids (engineering), health, astronomy. There could have even been things related to the tax system and military service. But if I lived 3000 years ago, I would never have used the number 1 million in a desert. Maybe they never used such a number, but for them it was like our expressions "infinite or indefinite". Although this fantastic thought of mine can be demolished by the existence of around 900,000 manuscripts in the Library of Alexandria. If they built a library that houses so many books and in which giants like Euclid, Archimedes and Ptolemy worked, they definitely needed and used that number somewhere.

As a hobby, I can program the algorithms I have learned only with JavaScript or I can enrich them with HTML and CSS by adding visuality to the work. But these should be things that can only be done as a hobby, not the main task.

I am happy that I have a job that I do (and believe I will do) like a hobby, beyond overwhelming issues such as the country's agenda and negative information.

Day 83

I had a bit of a hard time working today because I was feeling a bit under the weather (I think I had a cold). I felt like my head was very full and heavy all day long. I didn't like my design at the end of the day. Yes, it was a responsive design. Yes, everything was in its place, but it was so complicated that my eyes bled when I looked at the result. I have to think about how to make it better. Honestly, since I liked the simplicity of the first design, I didn't like the fact that so many boxes were so complicated. I guess I looked at the glass too empty, but these were the thoughts that came to my mind. I believe it can be done much better.

Day 84

What did I add to the design I made yesterday? I reduced the width of the photo using Parallax, added two navigator buttons that provide access to the dealer system and the publisher system on the same page, and corrected the missing parts I saw. Honestly, I couldn't add much innovation. That's why I always thought about what I could do by examining different sites. I tried to research and learn what features of CSS I didn't know. I looked at examples and research on design from Codepen and reference sites.

On what happens some time after sunset

I looked at the Algorima book again. I understood the multiplication algorithms in the book. In summary, the Karatsuba algorithm is more effective for multiplication of numbers with 14 digits or more because it shortens the number of operations considerably. But it is not suitable for numbers with fewer digits. Afterwards, I looked at which algorithms the computer uses for multiplication, but I only skimmed through it because I thought it might take some time to learn Booth's algorithm used by microprocessors. I didn't go into details and topics like ALU. I will try to put it into code after I have learned a little more. In the book, I just reviewed the old topics today and looked at the beginning of the algorithms related to Roman numerals.

After that, I did some reading on Pi. I will do more, but I guess I will have to look at modern physics. I think I'll look into it because it might be useful for myself (like sports, maybe like strengthening all the muscle systems in the body in a balanced way and strengthening all of them instead of just working one muscle system).

The mental fatigue of yesterday was thankfully absent today and I felt like it was a productive day, even if the product was not very productive.

Day 85

It's been almost 3 months since I started keeping a daily report. I don't think it has anything to do with studying engineering, but I always liked to express myself in a medium, to keep a diary anonymously. Now I'm trying to blend the diary keeping part with a technical language.

I looked at CSS today, of course. I wondered if I could try different things. I deleted some of the ones I tried because I didn't like them. Today, in general, I tried to solve the two biggest problems I saw yesterday (company photos and text content about our website).

Day 86

Today was a bit of a mixed bag. In the morning I only looked at the algorithm book, I got as far as the data structures part, and then when you told us to start thinking about the task, I got into very different topics. I read about Scrum, agile, extreme programming, etc. Towards the end of the day, I found different resources about OOP and building an e-commerce site. I will look at them first thing tomorrow morning and get different ideas.

Today I felt a bit feverish and my body was very broken so I didn't get much out of it. I need to get myself together urgently. If I can wake up early in the morning I can get something with vitamin C from the pharmacy (even though I know it won't do much good).

Day 87

I was thinking of creating stories about what should be on the site from the perspective of the user, the site administrator, and the seller, and determining the necessary modules, subclasses, and methods. After the meeting, I thought about how to communicate with a customer who wants to set up an e-commerce site just to sell us phones, how to convince him to do business with me, how to follow a path on issues such as detailing the work, pricing and duration of the project, and how to create a report. I searched a lot. Obviously, I couldn't find the exact structure I wanted. But I found structures that I think can help me. I will go through them and try to submit the report as requested on Monday.

Day 88

Today I tried to examine the most basic of my communication and information exchange with the customer and prepare a document accordingly. I learned what information I need to get at a basic level from a customer who wants me to design a website. I saw what the options are when preparing a website. I could only guess at the prices and duration. Although there are website designs offered with ready-made packages on the internet and the costs of "getting work done", I did not know exactly how much to charge for a specific job. Although I saw various time intervals as duration, it was generally said to be finished between 4-16 weeks in different sources I found. This was all about the work to come and the team to do it. I don't know exactly what I'm going to do tomorrow, but the topic I was working on Friday was ahead and I think I can look at it tomorrow. I feel like I'm approaching the stage of designing the system after receiving the first job (if I was able to get it).

In the evening, I continued reading the Algorithms book from where I left off. I came to the topic of recursions. I think I can finish the chapter on the basics this week. Basically, data structures were briefly mentioned and I understood as much as it was mentioned. After recursions, I will encounter random number generation algorithms. I conditioned myself that I should complete it this week. On top of that, I will try to tackle the problems again when the second part is completed. I think I'll be able to handle this and the day's tasks at the same time.

Day 89

Today was all about research, examining examples and thinking about the outline for my own report. Yes, I don't have any concrete results right now, but I had the opportunity to study many examples. And that's why I don't think that the time spent has been devalued. I think there is a need for it. Tomorrow I will start to address some concrete outputs. I believe that I will complete it within the given deadline by adding every detail I can see to my report.

Day 90

Why Agile?

The problem with the Waterfall model is the way it handles and solves the problem. What was it?
  • All requirements are collected from the customer.
  • A team analyzes these requirements and documents and prepares specifications and features for the design team.
  • The design team designs using these specifications and gives them to the development team for implementation. Developers write their code according to this design and send the final version to the testing team and the process is completed. The product is delivered to the customer.
What the statistics generally say is that the work done with the waterfall model is generally not accepted or liked by the customer. And the customer is always right, so all the effort, time and money put into the project is wasted.

There is another philosophical approach to this problem: iterative and evolutionary development. Scrum, XP, Rational Unified Process are examples of software development with this philosophical approach. They are also referred to as agile development process.

The concept of iterative development is simple: software development is organized into a series of small projects called iterations. Each iteration has its own analysis, design, implementation, and testing. At the end of each iteration, customer input is received. In other words, that iteration is explained to the customer and the customer returns. If the customer does not like or accept that iteration, only that part is corrected again. In this way, the process can be completed with much less loss compared to the waterfall model.

In short, the raison d'être of Agile development methods, as the holy religions (although I don't know what the unholy ones say) say, is to minimize waste.

The reason for writing this is that for me, when I go back to my notes, I have information that I can understand succinctly, and it is one of the cornerstones of the work we have started.

My understanding of software development was this: I'll design everything perfectly from the beginning, and then I'll code it and watch it perfect.

But that's not what this iterated model is about: I might need to change my design. If my analysis and design, which seemed perfect at the beginning, is terrible, I should be able to fix it. I shouldn't have to start all over again. And maybe, as they say, a perfect design is just a myth. Which it is.

In my sources of information I also found the following: Do not design for all requirements at the beginning. A detailed design should be made for the iteration being worked on. Designing small details without looking at the big picture doesn't make much sense to me at this stage, but I will try to engrave this point of view somewhere in my brain. But I also agree with what they say: "Not everything you design is perfect and will change or evolve throughout the life cycle of the project."

Now it is clear why we should use an Agile methodology. So why use and will we use object-oriented analysis, design, and programming?

Why Object Oriented?

We can be very familiar with the project, the programming language. We can create a product that actually works and that the customer will like without object-oriented programming. But with a small change in a small part of the code, everything can become very difficult and the sustainability of the product is lost. What object-oriented design and programming offers us is "modularity". Modularity gives us great ease in updating and reading the code.

What kind of Analysis and Design?

The first step in object-oriented analysis is to listen to the customer. We need to listen to the customer's problems so that we can create solutions. One or two user stories should be covered in an iteration. We are generally advised not to cover more than 10 percent of the whole story in a single iteration. The reason is that it is actually contrary to the existence of Agile.

The next step after listening to the customer story is to design the domain model with that story. A simple way to do this is: listen to the user story and underline names. These names indicate our potential future classes and are added to the domain model. The domain model simply defines the names and attributes of the classes. The behavior of the classes is not included in the domain model.

Summary of this section:

  1. Listen to the customer/user story.
  2. Design the domain model.
So the goal of analysis is to derive domain classes from the customer/user story, and the goal of design is to establish the relationship between objects in the domain model based on the user story. In addition to design, there are some principles (like SOLID) and design patterns (by Gang of Four) that have been established for object-oriented programming. We should take these into account when we create our classes.

3 stages of object-oriented analysis:

  1. Define class names
  2. Define class attributes
  3. Define the association between classes

The 3 stages of object-oriented design:

  1. Create sequence diagram for each scenario
  2. Create the class diagram design
  3. Apply design patterns and SOLID (because I learned it, otherwise other principles can be used) principles
I broke the task into 4 parts for the Monday morning deadline:
  1. Identify use cases, based on the user/customer story
  2. Create a domain model
  3. Create Interactions (sequence) diagrams
  4. Create class diagrams
Today I was in phase I. I tried to create every use case I could think of for the user and admin. In some places I also needed the system as a third actor. Some use cases were very basic, some were much more specific. The biggest thing I learned in these few days was "to learn or repeat the information that ensuring modularity and creating good inter-object relationships are the most basic goals". I only wrote down the use cases that came to my mind in 1 day and I don't know yet how to organize the relationships between them when there are so many of them. But tomorrow I will try to create domain models according to each use case. I don't know yet how to create modules or a "modular structure" according to the interconnected parts. As you know, this is the main problem and what I need to solve. All I want is to make a lot of progress tomorrow otherwise I feel that I will have a hard time until the project deadline.

I'll read a little more and then I'll go to sleep.