Learning process of a software developer

Lifelong learning is a vital skill for software developers. Without continuous learning, I cannot imagine how could a software developer have a successful career in our days. But how can one keep up with the loads of information out there. The amount of information to be consumed passes far our ability to consume and learn. How do we develop ourselves as successful software developers? What strategies should we use? Here is the learning process I use, perhaps it could be useful for you too.

1. Practice

There is a good saying I like: “Practice makes perfect”. If there is one thing that I would choose above all, it is the practice. Writing code is the single most important thing you need to do to get good at software craftsmanship. You may do it in different ways and different levels. Being a full time software developer I would say is the best way, but you may also work on your own or contribute to open source projects in your free time. Apart of full time serious projects, I find it also very useful to work on a side project. Side projects can be fun and may give you the opportunity to learn and enjoy what you do, and often, these projects can be turned to successful projects.

2. Following trends

Following trends is very important to keep your skills sharp. Knowing what is coming next in your industry is of utmost importance to excel in your career as a software developer. Following trends can be done in several ways and you may find which suits you best. You may choose to follow the industry leads in social media, or read regularly their blogs, or you might be just the guy who goes to the events of user groups and conferences. Following trends will show you what you need to learn next and where should you put your focus so you are trained well to cope with future challenges.

3. Video tutorials

Video tutorials have become the common way we consume information today. Videos have many benefits. We can consume higher amount of information in a shorter amount of time. Also, most people learn better when they consume information visually, and this makes watching videos a preferred way to learn new technologies. You may choose to subscribe to a learning site (e.g. PluralSight or Udemy), or you may choose to watch videos in Youtube, you have plenty of choices.

4. Books

Although we have several ways to consume information, I think books are the best choice when you want to learn a technology thoroughly. Tutorials are good to get a glimpse on a technology for evaluation purposes or to get an idea how it is working, but if you want to get a sound understanding of something, I think, books are still the best choice. They usually are more carefully written, present the information more completely and in a flowing order. Yes, they take more time to read and they are larger in volume, but they give you a better understanding and full perspective of a big picture.

5. Sharing

One of the best practices for learning better in my opinion is sharing your knowledge. Be it blogging, showing off your code in a user group, or teaching someone on a what you are good at, sharing your knowledge pushes you learn better what you know. Teaching challenges your understanding of a subject and helps you improve your knowledge. This is my main motivation why I write in this blog.

Summary

The learning process of a developer nowadays might be different and adjusted to custom habits and requirements, however, in my opinion, these are some of the best ways to learn new technologies and always maintain your skills. What are your learning habits? Share with us.

5 reasons you should be a web developer

Over the plenty of career choices in the world economies, choosing what to do for living is not an easy decision. A healthy career comes out of finding the intersection of market demand and what you love to do. Being in the software industry for around fourteen years, and ten of them spent in web development, my career choice of web developer has come out of a funnel, starting as a desktop application developer and refining my knowledge to web development as the potential market started to emerge. But web development has changed dramatically last ten years. The possibilities of web applications often surpass those of desktop applications in market reach and sales perspectives. I will list here 5 reasons you should be a web developer.

1. You can work independently

Being a good team player is an essential skill required to be a part of any organization, but when it comes to starting a private business or wanting to earn some extra money in addition to your full time job, being able to work alone is equally important and a huge benefit. As a web developer, you can create web applications, web sites, themes, and many more digital products which you can easily monetize. You may sell gigs in sites such as Fiver, or create WordPress themes and earn some extra money by working an hour or two in the afternoons at your home .

2. You do not have a big startup cost

Developing web applications does not require huge computing resources. The startup cost is as cheap as having a moderate computer and an internet connection. Many of the software tools which are used to develop web applications are free of charge or cost less than $100. Nowadays, even the hosting providers have lowered the hosting prices quite a bit, and you may easily find good hosting to your web site(s) for ~$5 per month.

3. You can sell your work online

Being a web developer, you do not need any shipping or packaging of your products. You simply push your code to the hosting server and run it there. You may also easily do remote consulting work or create web sites and sell them in different market places. Envato is one of the companies that provides different marketplaces for different digital products, one of them being for WordPress themes: themeforest.net.

4. You may develop mobile applications with web development skills

Web development has evolved over the years, and with that, the support to browsers as well. In current days, you may easily pack a web application as a mobile application and publish it in Apple AppStore, Google PlayStore, or any other mobile app market. The user interfaces may often be very similar to native applications and may create a full featured mobile app with a plain web development skills, thus, allowing yourself access to a huge market and business opportunities.

5. You have plenty of tools and framework to suit your work style

As a web developer, you will have plenty of tools and frameworks which make your job easy in many different ways. Of course this is highly impacted by the platform you choose, but I would confidently say that, all major web development platforms and languages have good communities with good support and plenty of tools available to develop web applications and web sites. This will make your jump start to web development easier and time to market quite short.

If you have not yet decided which profile of developer you want to be, here are five reasons to be a web developer. Web developers have plenty of opportunities in front of them which suits the needs of different kinds of persons. You may be an entrepreneur or a full time professional developer, web development has a lot to offer to you.

I want to create a website

Having your own website is one of the best things you can do if you are planning to have a serious online presence. Of course it is not a silver bullet solution, as it requires constant investment of time creating valuable content and marketing, but it is ultimately the starting point people will check about you online.

So, I want to create a website. What are my options? What should I do next? In this post, I will consider several options you may follow to create your own web site. Fortunately, there are a lot of options available to choose from, starting with ready made solutions which you may set up with very few clicks, to those which require advanced knowledge of some technologies. Unfortunately, I will not be able to list here all available options, but I will try to make a list of options which may suit most of you out there trying to create your own web site.

1. Free blog with WordPress.com

If what you are looking for is just a blogging website and you want it for free, wordpress.com may be the best choice for you. They have a managed wordpress hosting solution for which you may sign up and get your own blogging solution set up with a few clicks. This solution could be a good start if you want to try yourself blogging and create an online presence without investing any money. Though, this free solution comes with some limitations. You get a domain as http://yourname.wordpress.com and few free themes for your site. If you want a custom domain name like www.yourname.com, or a better design for your site you have to pay for it. You are also not allowed to install your own themes (if you already have one, or want to custom build one), but only choose from available ones there (free or paid).

2. Managed hosting with wordpress site

If limitations of wordpress.com do not fit you well, you may decide to go with a managed hosting where you may setup a wordpress site. I happen to prefer wordpress as my CMS of choice, otherwise, you may chose to set up a different CMS with your hosting provider depending on the type of hosting you have and the CMS you have chosen. With a manage hosting, you may chose your own domain, buy or develop a custom theme for your site, and do many more customizations which are not possible with free wordpress.com solution.

There are plenty of companies offering managed hosting solutions, and all of them vary in price and features they offer. Some of the popular hosting companies I have come over are GoDaddy and BlueHost.

3. Managed hosting with a custom solution

Another choice is to have a managed hosting solution with a custom web site developed for you. This is more powerful than above mentioned solutions as you have the option to chose everything (from colors, fonts, to design and features developed), however, it is more expensive. Depending on the market you live, developing a custom web site may cost you from several hundred dollars to several thousand dollars.

4. Private hosting

Private hosting is an advanced solution, mostly suitable for companies, where you get a private server rented for you from a hosting company. The hosting company creates the server (be it real hardware server or a virtual one), connects it to internet, but leaves the management of the server environment to you. This has huge advantages as you control what is installed in the server, what features do you want to offer, and it is very easy if you want to add some unsupported technology to your solution. However, it is also very expensive and requires technical skills of system administration and system security as this task is on you now.

5. Cloud solution

Cloud solution is a superset of private hosting. If you choose to have a cloud solution with one of the biggest market players in this industry (Microsoft Azure, Amazon AWS, Google Cloud Computing), then you not only have the server on your control, but a whole IT infrastructure. You have the possibility to create virtual servers, website hosting, email services, active directory services, storage and backup services, and many other IT infrastructure components as a service. This powerful solution requires you to have a very good understanding of IT infrastructure configuration, but as a benefit, you get a flexible IT architecture which can scale up and down as needed and you pay for what you use.

Conclusions

Which one is right for you? Well, it depends. Your needs define what is best for you, but generally speaking, amongst these, number 2 and number 5 are my favorites. So, if I want to create a website for myself, or you are an individual or a business who wants to have a blog or a personal/company site which is for online presence, then I think option number two is the best choice as it has the possibility to scale up with a custom solution or stay with a WordPress or a specific CMS. If you have a startup which is offering a SaaS or any other solution that you expect to have increasing demand, then I think option number five is the best as it offers you the possibility to start small and grow as needed. Of course these come with the complexity of knowledge required, but it will be worthy to invest in that direction.

Do you need to take developer certifications

Software development industry is one of the fastest progressing industries. New technologies, amazingly fast changing businesses, and advancement of requirements make learning a daily task of software developers. In a way, when we choose this profession, we kind of agree to lifelong learning, but there comes the question:

“Do you need to take developer certifications?”.

Personally, I like developer certifications. You can see from my profile, I have taken 9 different industry certifications, mostly for Microsoft technologies. The biggest value I see in taking certifications is learning the details of some technologies. As the saying goes “The devil is hidden in the details”, I like learning some technologies in deep details. I do not claim that I do remember all those details from all the certifications I have gone through, but from the experience, I have had some “aha moments” when some of those details have spared me lots of time. Certifications have also helped me to establish my knowledge and credentials as knowledgeable person in those technologies and help me teach those technologies in various courses.

The effect of certifications on your career

I have read in many articles that certifications help you find a better job. I would not argue that you can look better or more prestigious with all those certifications but personally, I have not seen any case that certifications have been the ultimate factor for hiring someone. Perhaps I’m short of that kind of experience, but I put myself in the shoes of a hiring person, if I’d be choosing someone to hire, the certifications surely would be a benefit or a value added for the candidate, but not an important factor for my decision. The important factor is the knowledge one has, and industry certifications can only be a plus.

The effect of certifications on your professional development

If you have taken and passed an industry certification, most probably you have followed a learning plan to learn all the objectives tested in the exam, and that has pushed you to have some good understanding of that specific technology. Moreover, you have seen the latest developments in that technology and have become familiar with what is required to follow on further developments.

Development technologies advance every day, and if you follow the cutting edge technologies, this is an indications that you are also a productive developer as new technologies most of the time make the development process easier and faster. I have not seen a better illustration of this than this picture

are you too busy to improve

The effect of certifications on your personal brand

Branding is not something exclusive to corporates. We all have our brand, your name is a brand, and you should work to make it better and better. Taking certifications will have a positive impact on establishing a firm expertise in your industry and showing how seriously you take your career and personal development. Certifying your knowledge will have an added value towards the development of your personal brand as an industry expert.

Conclusions

As I stated from the beginning of this post, I am very much into certifications, not from the marketing benefits I get from them, but from the learning and self development benefits I get from the process of preparing to take the exams. Personally, I have had a lot of benefits from the knowledge I have gained during that process, therefore I would recommend taking industry certification exams to anyone who wants to advance in software development career.

The most important skill for Software Architects

I trust anyone reading this post title most probably is expecting to see something like UML Design, OOP Design, writing code, etc. I would not consider these in required skills list, these are I would say, mandatory skills for a Software Architect. In my opinion, the most important skills for Software Architects are the communication skills.

The importance of communication skills

In Microsoft .NET – Architecting Applications for the Enterprise (2nd Edition) book, the role of the software architect is defined as a person who ties together the requirements and specifications, and one of the most important responsibilities of the software architect is mentioned to be the acknowledgment of requirements.

This requires a lot of communication with people of different profiles and various knowledge of technical jargon (project managers, business analysts, potential users, etc.), and it is a natural expectation that Software Architect should speak the language of business rather than the other way around.

Speaking the language of business is one part of the communication. Next comes communicating that business knowledge and requirements to development team. In my experience, I have seen several situations that developers and business people were speaking about the very same solution, but the language terminology they used made everybody think that they are speaking about two different solutions.

It is the technical skills of planning, designing, development, and implementation of a software solution that qualifies one for  the position of Software Architect, but in my opinion it is the soft skill of communication that is the most important skill for software architects and the skill that makes one an appropriate choice to be in that middle point of the team. As my boss says, we must talk talk talk.

What can you do to improve your communication skills?

Of course there is no silver bullet to this problem. We humans tend to be unique in our behavior and skills, and as such the recommendations can not easily be generalized. However, I have three points which I can recommend to anyone:

  1. Seek for sincere advice from people around you, be it your family, your friends, or your colleagues. Generally, it is not easy to get someone to sincerely tell you what they think. People sometimes don’t like to tell what they think and sometimes they are afraid of being percepted as criticizing others, so they don’t tell you exactly how you are being percepted unless they get this freedom from you. Try to make people feel comfortable saying what they think about your communication skills and appreciate sincerely their comments.
  2. Spend some time with yourself thinking about your communication with others. What did you say, what was your intention to communicate and how was it percepted? This could be very helpful to find your weak points, on which you should focus to improve.
  3. Read the book How to win friends and influence people by Dale Carnegie. This is one of the best books I have read and I can confidently recommend this book to anyone. It has an immense set of advices which are very useful for improving one’s communication skills.

You can find plenty of advice from different resources on internet, from books, and from people around you about how to improve your communication skills. Pay attention to the input you get especially from people, you will appreciate it at the end.

Staying up to date with technology developments

For a software developer, staying up to date with technology developments and follow latest trends of software development is of utmost importance. But nowadays, the number of online posts/activities that are competing for our attention has increased exponentially. Dealing with all this load of information and staying up to date is not an easy thing. I have create a simple strategy which works for myself and I’d like to share it with you.

 

Conferences to follow/attend

Conferences are where the latest developments usually are formally announced and demonstrated. Attending developer conferences gives me the opportunity to listen to the demos and presentations of latest trends in software development as well as network with my peers. Sometimes, attending conferences is costly, especially if you target one of the major conferences, but luckily, most of those conferences publish their videos online so we can view them.

Some of the major conferences I follow are:

User groups

Local users groups provide excellent opportunities to see what your peers are up to, what is happening on the market, and what technologies and trends are actual in your neighborhood. There is also a value added activity of networking with your peers which is a good benefit. There is a user group for almost anything out there so just search for user groups at your neighborhood and join them.

Sites to follow

There are some major sites where I follow latest developments on software development technologies and practices, and entrepreneurship (in my opinion, developers should be quite familiar with what is happening on the business world as well) . Of course the list of the sites will be relative to your interests and platforms you use, but here is my list:

Persons to follow

Every industry has its own influencers who evangelize technologies and practices, and sometimes these people define the trends the industry follows. It is very important to chose who you follow as in some ways, by following a person you accept his influence to some degree and if this person is a successful one, you will benefit positively from his experience and thoughts.

Here is a part of the list of persons I follow:

Conculsions

It is quite challenging to stay up to date in this dynamic world, and we need a process in order to excel. Having a defined and structure workflow of flowing the information in and getting most of it will be a skill we all have to master. Depending on the technologies you use, the market you work in, or your interests, most probably your list will not be same as mine, but the principle behind is valid for any interest I think. It is important to define your standard sources of information and supplement them with additional sources from time to time or even substitute your standard sources with new ones after some time.

What are your sources of information?

 

Microsoft Certifications: Web development path

Microsoft Corporation offers a rich set of possibilities when it comes to education of new and existing software developers. Taking certification exams and certifying your knowledge is one of the best ways to build a solid knowledge base, improve your skills, and get ahead with your career in software development. In this post I will describe what it takes to follow Microsoft Certifications: Web development path.

In this wide range of certifications, where does one start from? Well, it depends on your current skills and work experience. If you are new to software development with less then one year of work experience or so, then my suggestion is you start with Microsoft Technology Associate (MTA) certifications.

You may start with  following MTA exams:

Software Development Fundamentals (Exam: 98-361)
Web Development Fundamentals (Exam: 98-363).
.NET Fundamentals (Exam: 98-372)
HTML5 App Development Fundamentals (Exam: 98-375)

For the complete list of MTA certifications please see MTA Certifications web page.

MTA certications are optional and are useful only if you do not have work experience developing these solutions.

What after that? The next part of the path is of professional certifications. The web development path leads to Microsoft Certified Solutions Developer: Web applications (MCSD). This title is awarded to anyone who passes these exams:

Programming in HTML5 with JavaScript and CSS3 (Exam: 70-480)
Developing ASP.NET MVC Web Applications (Exam: 70-486)
Developing Microsoft Azure and Web Services (Exam: 70-487)

When you complete all of these exams, you will get the title of MCSD: Web Applications which will certify your knowledge in the field of developing web applications using HTML5, CSS3, JavaScript, and ASP.NET MVC.

Certification 70-486: Developing ASP.NET MVC 4 Web Applications

Last week, I took the exam for Microsoft Certification 70-486: Developing ASP.NET MVC 4 Web Applications and passed successfully and scored 831. This was my first exam after almost two years. Although, the exam format and questions’ style did not differ, I certainly noticed some differences.

The number of questions were 45, and the questions were spread in proportion:

22 general questions
23 questions in 3 different scenarios

The test included 3 different scenarios to analyze, and it required a good amount of time to spend on reading code and business requirements of the scenarios in order to be able to answer the questions. Although the scenarios were quite different, it was very easy to mix the requirements, so a good focus had to be put to remember the requirements of each scenario.

The questions were practical, but not easy. They were focused on details of specific features. I was introduced with good amount of questions regarding session management, especially in distributed environments, security implementation, debugging, azure deployment, and related to controller implementation.

To anyone who is preparing to take the exam, my recommendation is to put a focus on the topics above mentioned.

I hope this helps.

Windows Command Line (CMD) and Mac OS Terminal Navigation Commands

Sometimes, even the simplest tasks can be forgotten if not practiced and repeated. In this short tutorial, I am going to show you some basic command line commands in Microsoft Windows, and their equivalent commands in Apple Mac OS Terminal. This is by no means a complete reference to the available commands, just a short list of some common commands available to you on your operating system.

Knowledge of CMD/Terminal commands may be needed for using command line interfaces  (CLI) of applications where Graphical User Interface is missing, or when CLI  provides a faster/easier way to perform a task. Let’s see some of the commands

The CMD/Terminal window

To open the CMD window in Microsoft Windows you may follow several ways, one of them being choosing Run option from the start menu, typing “cmd” in run window, and clicking “enter”. This will open the CMD window in Microsoft Windows

CMD Home folder
CMD window

Here you will see the version of the Operating System, and the path to the home folder. The white sign in the picture points your current location in the disk. Home folder is the usual starting point when you open CMD window.

In Mac OS you will usually find the Terminal in Other programs folder. When you open the terminal, you will see the name of the current folder. If you want to know the full path to the current folder, you can type pwd and see the full path.

MacOS terminal window

List files and folders

If you want to list files and folders in that directory use:

WINDOWS MAC OS
dir ls

Here you see the list of directories in my home folder

Listing files in a directory with dir command in Windows CMD
Listing files in a directory with dir command in Windows CMD

Move to directory

If you want to change your current directory to another directory, use:

WINDOWS MAC OS
cd “path to the folder” cd “path to the folder”

When you execute the command by pressing “enter” in your keyboard, if the path is correct, you will see that you current folder will change to the new path.

Get back to parent directory

If you want to go one directory up in the directory tree, execute:

WINDOWS MAC OS
cd.. cd ..

and you will see your current directory will change to the parent directory. Please note that in windows two dots are connected to cd, and in MacOS there is a space between cd and dots.

Get to the root

Wherever you are in the directory tree, you can move to the root directory by executing:

WINDOWS MAC OS
cd cd /

This will get you to the disk root of the directory tree.

Create a directory

Creating a new directory is done using

WINDOWS MAC OS
mkdir MyFolder  mkdir MyFolder

This will create directory MyFolder in your current directory.

Remove a directory

Removing a directory first requires the directory to be emptied from contents, and then be removed. Removal commands are:

WINDOWS MAC OS
rmdir MyFolder rm -r MyFolder

 

Rename a directory

To rename a directory execute:

WINDOWS MAC OS
rmdir  mv oldName newName

 

Rename a file

To rename a file execute:

WINDOWS MAC OS
ren oldFileName newFileName mv oldFileName newFileName

 

Delete a file

To delete a file exeute:

WINDOWS MAC OS
del filename rm -Rf filename

Delete command does not ask for confirmation, so please be careful.

Check the Path

Some programs need to be added to the PATH in order to be accessible through command line interface. If you want to check your current path, you can execute the following command:

WINDOWS MAC OS
echo %path% echo “$PATH”

This will print current path variable and you can check if required programs are added to the path.
I hope this helps.

Social Innovation Camp Kosovo

Last weekend, I had the pleasure and opportunity, to be mentoring for the second Social Innovation Camp Kosovo, together with Dan McQuillan, Fisnik Ismaili, Laura HahnPeter Manning, and Josh Harvey .

Mentoring badge Arian Celina

During a 48 hours challenge, six groups of young Kosovars tried to make reality the idea they had proposed, which intended to make a social impact in Kosovo. After 48 hours of hard work and fun, teams came up with the prototypes of their ideas, went out to test their prototypes with other people, and then presented their prototype together with the impressions gathered outside, in front of the independent judge panel.

IMG_2638After all the fun and hard work, three teams excelled and won prices to continue forward their ideas. The winners were:

  • Eventor – A project which intends to put together events and scholarships for Kosovars, and make them available for students and others to get informed.
  • KapLexo – An idea around book exchanging for second hand books, while making also possible for people to review, comment, meet and discuss, about the books they like and have read.
  • ParkingLot – An idea which intends to make free parking slots in maps (web and mobile) through social participation.

Personally, I would like to thank UNICEF Innovation Labs Kosovo for making this event possible, which creates opportunities for young people to start new projects which could have positive impact in Kosovo.