The Pragmatic Programmer

Priyanka.R : Ramarson Technology Developers LLP 

A Pragmatic Philosophy is an attitude, a style, a philosophy of approaching problems and their solutions. Taking responsibility, accepting changes &Understanding the context for better software in a continuous learning cycle

Tips for becoming a Pragmatic Programmer ;

1: Care about your craft – Develop your software well with good software tools and best possible technology available.

2: Think ! about your work – Turn off the autopilot, think every decision you are making every day.

The Cat Ate My Source Code

–Provide Options, Don’t Make Lame Excuses–Take Responsibility

Don’t Live with Broken Windows

Don’t leave “broken windows” (bad designs, wrong decisions, or poor code) unrepaired. Fix each one as soon as it is discovered. If there is insufficient time to fix it properly, then board it up.

Soldier’s story! ‘Be a Catalyst for Change”! The villagers think about the stones and forget about the rest of the world. We all fall for it, every day. Things just creep upon us.

–Take awareness of yourself, don’t be the boiling frog imagine the big picture

–Constantly review what’s happening around you, not just what you personally are doing.

–Being so concerned with the details of a problem, you can’t see its overall structure.

THE PRAGMATIC APPROACH

The Evils of Duplication: The problem arises when you need to change a representation of things that are across all the codebase.

Types of duplication:–Imposed duplication–Inadvertent duplication–Impatient duplication and–Inter-developer duplication

ORTHOGONALITY

–Two or more things are orthogonal if changes in one do not affect any of the others. Orthogonality allows to:

–reduce the numbers of errors–divide functions within an application easier–divide teams more logical–test faster

TRACER BULLETS

–Tracer Bullets Don’t Always Hit Their Target

–Whereas tracer bullets (can be algorithms, techniques, languages, or libraries) should penetrate a bigger area, prototyping provides great feedback when exploring a more focused area of the project.

Advantages:

–Users get to see something working early–Developers build a structure to work in–You have an integration platform–You have something to demonstrate–You have a better feel for progress.–Shell Games–Debugging(Fix the Problem, Not the Blame)

THE BASIC TOOLS

Debugging Strategies:a)Visualize Your Data b)Rubber Ducking

Pragmatic Paranoia: You can’t write perfect software.

CUTTING THE GORDIAN KNOT
CHECKLIST TO IMPROVE: When solving impossible problems, ask yourself:

–Is there an easier way?

–Am I solving the right problem?

–Why is this a problem?

–What makes it hard?

–Do I have to do it this way?

–Does it have to be done at all?

GOALS: 

–Learn at least one new language every year–Read a technical book each quarter–Read nontechnical books, too–Take classes–Experiment with different environments.–Stay current–Get wired.

IOTNEXT-2018

IoTNext is a part of the GoK’s effort to bring and support a series of premier technology conferences in Bengaluru. IoTNext 2018 is a part of sub-events leading to the state’s flagship event: Bengaluru Technology Summit, scheduled from October 30th-31st 2018. As a part of the event, various presentations on IoT were made. The topics covered the impact of IoT on blockchains, Industry 4.0 and smart cities. We will see how IoT is going to play a part in smart cities in detail.

pasted image 0

Smart City:

Smart cities focus on people’s most pressing needs and on the greatest opportunities to improve lives. It taps on a wide range of approaches – digital and information technologies, urban planning best practices, public private partnerships, and policy change – to make a difference. Smart Cities always put people first.

pasted image 1

Water Management:

IOT for Smart Water management process involves the following procedures,

  • To set up Potable water monitoring tools to monitor the quality of tap water in all government owned education institutes and public places.
  • To set up project for real-time detection of leakages and wastage from factories in rivers and other natural water bodies.
  • To set up project for monitoring of water level variations in rivers, dams and reservoirs, for proactive disaster management.

pasted image

Waste Management:

Deploying smart trash cans for real time waste management system is one of the key applications of a smart city system. Municipal authorities need an efficient way to clear the trash from all public places before it becomes a mess. And this needs to be achieved with the minimum overhead of cost and impact to the city dwellers. LoRaWAN is one of the earlier LPWAN technologies that envisages a city-wide network for keeping track of public infrastructure assets. Once fitted with a BLS device on a trash can, LoRaWAN allows the city authorities to keep a tab on the bins via wireless connectivity.The head of the dustbins can be replaced by a solar power panel which can charge the battery installed in the bins for their proper functioning.

pasted image 2

Energy Management:

Deploying wireless sensors network in various cities and connecting it to Database which in turn can be fed into web applications to predict the outcome of models. The data which in turn can be used to set turn on and off time of applications in a building.

In a large building, the following sensors can be used for measuring parameters such as:

  • Temperature
  • Relative humidity
  • Carbon monoxide
  • Nitrogen Dioxide
  • GPS location

 

 

 

 

 

image5

Smart vehicle parking system:

The difficulty people encounter at theatres, multiplexes these days is finding the availability of parking space. Most of the times they need to traverse through multiple parking slots to find a free space for parking. The problem becomes more tedious if the parking are multi-stored. Thus the problem is time-consuming. This situation calls for the need for an automated parking system that not only regulates parking in a given area but also keeps the manual intervention to a minimum. When a car arrives at the entrance, it will be stopped at the main gate and the driver de-boards the car. Using the Android application on his Android device, the user commands the Parking Control Unit to check the Status of available Parking slots, through an SMS. On receiving this command, a search for free slot is carried out and corresponding information is provided to the user, by means of SMS.

pasted image 6
Conclusion:

Smart technologies can provide solutions for cities by helping them save money, reduce carbon emissions and manage traffic flows. Government as well as private sectors plays an active vital role in developing new business model and developers are putting their utmost efforts to optimize the technology so it can reach the end user with ease. So , it’s a positive sign that as a collective society we are making progress in the human revolution and technology is creating impactful progress in the right direction.

Summary of “Golang”

Golang

For the past few days I was engaged in learning a new programming language called “Golang”, it’s a simple programming language for developing robust scalable software applications. I have explored many new things in the learning session.  I would like to share my ideas and my learning experiences On Golang programming language.

Go Vs other programming languages?

python-go-and-the-cost-of-concurrency-in-the-cloud-29-638

Golang is a general purpose programming language which can compete with C and C++ languages, Go has a simple syntax with a minimum set of standard key words, the interesting thing with Go is, one can build complex applications, with simple programming model. We can put our effort in higher level abstract things. When we look the syntax of Golang, it eliminates lot of standard which are usual in C#, Java or C++. Go inherits many concepts from C language. To give few example, like how simple the language is, we don’t need to specify a semicolon (;) to terminate the line, no access modifiers in Golang. We can do it by declaring the function name starting with upper case or lower case. Most important things are, its compilation time is much faster than other languages, and even compiling very large projects is done in few minutes.

Generally, it eliminates some standard patterns from Programming Language Theory, the language designers have made it simpler to achieve more performance in critical real world application. The compiler directly converts from high level language to machine language, i.e. we don’t need any intermediate steps like JVM for Java, so the compiler quickly builds the application. Once the basic syntax in “Golang” is familiarized, we can develop application with its inbuilt standard packages without depending on any 3rd party Frameworks/tools.

Go for Fresher’s than experienced developers

startup-vs-mnc-750x500

I would say comparatively Golang will be more attractive to the fresh software engineers than the experienced developers, because when we start working with Golang its provide very simple syntax to concurrent programs. The learning curve is bit faster, but for the experience developers it will take some time to understand the core benefits of Golang programming language because for the past few years If someone developed their real world application using Microsoft technologies or any other technologies, it will not be so easy to quickly adapt this new language, it will take some time to understand the language features. Once core concepts are understood, one can build real world applications.

“Unlearn something to learn new things”

Go syntax is really different than other programming language, for example: We don’t need while loop but we can achieve the same thing via “for” loop, so by learning one looping statement we can do the same thing what we did for other programming languages, so it gives flexibility to build the application.

Concurrency with GO

parallelism-centric

I have learned concurrency mechanism in this session. It is one the core feature of GO, very useful and we can use the standard library packages rather than using any additional packages like a TPL and so on, with simple keyword we can execute multiple function concurrently using the keyword “go” calling a routine, so the go routines will be running independently and automatically, this will increase the performance as well, here the channel is playing the important roll to synchronize the go routines.

Go with Interfaces

Go provide language features like interface and inheritance. Similar concepts like in other languages, we achieve the same thing what we achieve in other programming languages like C#, which means I would not say Go programming language is perfect object oriented programming languages.

Comparing to other Object Oriented languages. Go is much simpler, for defining the interfaces and types and implementing those interfaces by concrete methods on respective struct, so the compiler will check who are all implementing those methods from the Interface, they can have an access to the interfaces. Its bit difficult to grasp or understand the things who came from traditional object oriented programming.

Go With Web

We can create web application using standard library package called “http” and some sub packages as well, here the http middle ware stuffs is interesting to manage the shared functionalities, i.e. log the application trigger or any other authentication mechanism in the real world application and so on. JWT is also important concept to understand the token based message exchanging mechanism of JSON data across the client and server.  There are lot of built in packages available to extend the application and customize more.

Unit testing

 download

This particular section was really interesting for writing unit test for our application, here we are simply using the “testing” shared library packages and start writing the unit testing, for the assertion we can use Omega packages, but we don’t want to mention the packages as well, there are lot of interesting points in the unit testing, because it provides some interesting features like “Benchmark” test, it is really useful to benchmark the flow and produce the average result across different scenario, another interesting things is we can run the unit tests in  parallel and can skip some long running unit tests using a flag by command line.

Conclusion

Overall the session was really useful to understand the concept of new programming language and to understand why its differ from other languages and so on, for me the interesting features which attracted myself to GOLANG   is its concurrency, channels, interfaces, inheritance, unit testing, packages, so overall Go is a language, easy to learn for fresher’s compare to the other experienced developers, because they can quickly understand and adopt. An experienced C# developer, will take some time to understand the changes, if someone is open minded and willing to unlearn some standard programming concepts he learned and practiced in Java or C#.

One needs to put some more effort and change the way he programs to speed up the learning process and use Go for building complex robust scalable solutions.

Thanks to Mr. Siju Varghese, Solution Architect who specializes in Go cloud and Docker.