9 Simple App Ideas to Learn Android Programming (With Tutorials)

The best way to learn programming is by getting your hands dirty and writing actual code. Reading programming books or watching courses is fine, but they become pretty useless if you don’t practice what you’re learning. If you ever tried to read a book about coding without actually trying it out yourself, you might have experienced situations where a concept totally made sense to you when you first read it, but when you later tried to reproduce it, you completely forgot how the syntax looked or how to even begin. I definitely had situations like this.
That’s not what we want. We want the stuff we are learning to stick, which means we have to write code. Now, you could do the exercises that most programming books contain and that’s probably your best choice if you are just starting out and have zero experience. But once you understand the basic concepts and know how to build a simple layout, it’s much more fun to practice by creating an actual app. Exercises in books are usually dry and boring and can make you think that programming is as much fun as doing math homework. Building little programs on the other hand is exciting and gives you a sense of accomplishment after you’ve done it.
The problem is, a lot of people don’t really know what to build. Others have ideas but start too big and with too advanced concepts, so they don’t finish their project. Again this happened to me. The first app I tried to build was a gamified Pomodoro timer in which I basically wanted to implement a whole role playing game world. And with “I tried to build” I mean that I created 2 screens before I deleted the project. Start small and incrementally increase the difficulty level. Be patient about it and try to learn as much as possible along the way. The good news is, you can actually build really cool stuff without complicated online features, user accounts, servers and stuff like that.
Advertisement
In this blog post we want to take a look at some simple app ideas for beginning Android programmers. Those will be offline apps without any advanced third party libraries. They will help you learn important basic concepts, not avoid them. If you are already an advanced developer, this post is not for you. You should do something more difficult instead.
To most of these app ideas I have Youtube tutorials, where I explain everything step by step. If that’s the case, the title of the paragraph will be a link and you can click on it to get to this particular video or playlist. If you want to make it a bit more challenging, pause the video at difficult spots and try to figure out the next step yourself before I present the solution. Don’t give up too quickly! You will learn much faster by solving problems yourself.

I think there is no developer who didn’t build a Tic Tac Toe game when he first started out. Ok, I guess there are some, but Tic Tac Toe is a really nice project to practice coding in a fun and enjoyable way. That’s because the logic behind it is simple enough that even though it’s challenging at first, pretty much everyone can do it. But you will have to ponder a bit to figure it out. (This does not include creating a computer player/AI, that’s a lot harder).
I have a tutorial on Youtube for a Tic Tac Toe game with a points counter and a reset functionality. There you will also learn how to handle configuration changes, which happen for example when you rotate an Android device. Configuration changes are an important Android concept that you can’t get around if you want to create apps. For that reason it’s good to learn about it as early as possible. Click on the link above to get to the playlist.

Countdown Timer / Stopwatch  (Those are 2 different links)
A countdown timer and stopwatch are app ideas that you will probably not hear that often, but they are actually pretty cool and fun to build. They are also quite challenging to implement. First of course you have to get the timer running. But then you also have to properly format the time, which is usually given in form of milliseconds. Transforming milliseconds into seconds, minutes and hours without accidentally counting anything twice can easily take a few hours to figure out (if you don’t look at the solution). There are a lot more tricky problems when building such a timer, but it’s also a lot of fun and you actually create something useful that you can put on your own phone.
After you’ve finished the project you could also build some more advanced timers, like a Pomodoro timer, which automatically counts and alternates between different time intervals.

Advertisement
With something as simple as a random number generator you can do some pretty cool stuff, like picking a random color, flipping a coin or throwing a virtual dice. Very useful for people who can’t make decisions. It’s a rather simple project, but you still have to think a little bit and figure out how to handle click events, how to create a switch statement and how to use the random number generator class, which is a bit tricky as well.
Click the link in the title to get to a quick and easy dice roller tutorial. It also contains a link where you can download the necessary images. If you want to make it a bit more challenging, try adding a second dice or implement a points counter.

Calculator
I don’t have a calculator tutorial yet, because the UI part is a bit tedious for a video tutorial, but nevertheless it’s a great project to train your logical thinking and programming skills. Adding or subtracting two numbers in code is pretty simple, but making the app actually behave like a conventional calculator, that for example adds entered digits to the end of the line, has a character count limit and shows the last result after executing a math operation, is a bit more tricky. But tricky is good, because it means you will learn a lot from it.
If that’s too easy for you, try building a scientific calculator. If it’s too hard, try your hands on a tip calculator first, where you just calculate the percentage on a number input or split a bill up into multiple parts.

Why not build a reminder app that shows you notifications for different events throughout the day? The playlist linked here teaches you how to create notifications on Android and is up to date with the latest changes and requirements, particularly notification channels. Together with the AlarmManager class and some simple input fields you can create an app that sends you notifications on your phone at scheduled times. Maybe build an app that reminds you to brush your teeth 2 times a day or to not forget taking your medication.

An app that can only save and load one single note might be not the most useful tool for your day to day life, but it’s a good way to learn how to write a text file to the internal storage of an Android device. You will use some really raw Java stuff here, like FileInputStream, FileOutputStream and a lot of try/catch blocks. The tutorial will be confusing at first, because it’s pretty low level and not as abstract and easy to use as for example SharedPreferences. But the video takes a little more than 10 minutes, so nothing to be scared of.

Advertisement
If you want to store large amounts of data offline in structured way and retrieve it later, you have to learn how to use databases. A to-do list, grocery list or any kind of list app is a great way to start getting into this topic, because the database structure is usually pretty simple and without any complex relationships. Here we use SQLite, which is built into Android by default, so you can use it right out of the box without adding or preparing anything. If you want to show the database entries in your app, you have to learn about RecyclerView too, because a RecyclerView is necessary to display a large list of data in a memory-efficient way. In the playlist linked here we do exactly that. We build a grocery list app with SQLite and a RecyclerView, where we can add different items with a name and an amount, order these entries by their timestamp and swipe them off the list to permanently delete them from the database.
SQLite is pretty low-level and requires a lot of boilerplate code. It’s very easy to make mistakes because the syntax can be confusing and the compiler won’t show you many warnings for wrong SQLite statements. There is an Android library called “Room” that abstracts a lot of this low-level SQLite stuff and makes it easier to use, but nevertheless I think it’s good to start with raw SQLite as a beginner and then switch to Room when you feel like you understand it.

If you don’t already have enough of SQLite, creating a quiz game is a good way to practice it a bit more. The database schema is slightly more advanced than in the grocery list app and we use some more complicated query methods, but this time at least we don’t need to build a RecyclerView. What we will learn instead are things like how to restore the application state after configuration changes, how to use SharedPreferences to save smaller amounts of unstructured data, how to send variables between different activities (screens) and more.
This tutorial is one of the more popular ones on my channel, probably because it’s a lot of fun. It’s also the toughest one on this list, but we go through it step by step, so everyone can do it, even with very little experience.

Budgeting App / Calorie Counter / Any Tracker
Another simple but useful idea would be an app that keeps track of some metric in your life, like your finances or nutrition. You would have to figure out how to take user input, how to process it and make your calculations on it, how to store the data and then how to display it in a useful way. I don’t have a tutorial on any of those apps specifically, but you can find all the necessary pieces and concepts in my other tutorials. And since you are the developer, you can give your app any functionality you want, display the statistics you need and this way build the perfect tracker for yourself.

Ok, those are my app ideas you can try as a beginner. Don’t forget to follow my Youtube channel for more tutorials in the future.

How to Find a Good Laptop for Android Programming in 2019

If you’re active in the Android community, you’ve probably seen the many memes and funny images illustrating how computers get brought to their metaphorical knees by trying to run Android Studio. Apparently, our favorite IDE eats RAM like M&Ms and subdues even the strongest PC set-up.
Of course, these images and jokes are exaggerated, but Android Studio is definitely not a lightweight application. Based on IntelliJ IDEA, Android Studio is a modern IDE with lots of useful but resource-intensive features like real-time code inspection, syntax highlighting, different visual layout editors, external plugins and more. Besides that, you can also use its integrated emulator to simulate a fully functional Android device to test your app on, which, of course, is not an easy task for a computer either. And to turn your code into something that can run on a device, the project first has to be compiled and built from all the different files and settings it contains.



On top of that, a lot of you want to do their programming on a laptop, be it because of university, because you want to be able to code while traveling, or for any other reason. This makes things even more difficult because you usually get lower performance for the same price on a laptop compared to a PC. Finding a suitable programming laptop, therefore, is not a simple task and I tried to make this process a bit easier for you by figuring out how to spend your money as intelligently as possible if you plan to buy a new machine.
The recommendations here are mostly based on my very thorough research. Personally, I only use a PC for coding and I didn’t have the opportunity to test Android Studio on a lot of different laptops. However, when you search through different online discussions, you get a pretty good idea which hardware parts matter more than others when it comes to programming tasks.



Which specs are important?

Processor, RAM, graphics card… not all computer specifications matter equally if you mainly want to use your laptop for coding. If you don’t care about the latest high-end games or do any other intensive tasks like video editing or complex 3D modeling, you can save some money on the hardware parts that don’t matter as much and invest it into the ones that actually help you run Android Studio and other necessary tools faster and more stable.
In the chapters below, we will take a look at the different computer specifications and what role they play for your choice of a programming laptop. After that, I will recommend 4 laptops in different price ranges that I found to be good picks.

SSD

An SSD (Solid State Drive) quickly crystallized out to be the most important component for running Android Studio fast, even more important than RAM.
Because they don’t have a mechanical arm that has to move around in order to read data like it is the case for conventional HDDs (Hard Disk Drives), everything that you put on an SSD will load faster, including your operating system and programs like your IDEs and emulators. Projects will open faster too and build in a fraction of the time.
Also, because they don’t have any moving parts, SSDs don’t make any noise, they use up less power, they don’t heat up as much, and they are less sensitive to physical forces (for example, when you drop your laptop). Those are all very useful features to have on a laptop which HDDs can’t provide due to their design.
There is one caveat, however: Space is more expensive on an SSD than on an HDD. As an example: On amazon.com, the top result for SSDs right now is the Samsung 860 Evo, which, at the time of this writing, costs $78 at 500 GB. That’s already a good price and it has dropped quite a lot over the last couple of years, but it’s still more expensive than HDDs with multiple times the size. If you get into the terabyte range, SSDs quickly become unaffordable for the average user and top out at around 4 TB. SSDs will, of course, continue to fall in price and at the same time become bigger over the next years. But since you can use both an SSD and HDD on the same computer, you don’t even need a terabyte-large SSD. You can just put your operating system and everything else that has to load quickly on the SSD, while you use your HDD for media files like music and movies and any programs that you only need occasionally. And even if your laptop doesn’t come with an additional HDD built-in, you can always buy an external one and store your data there.
Together with a bigger HDD, a 128 GB SSD can be enough if you mainly care about using Android Studio. However, from personal experience, I can say that 128 GB feels small if you want to install other programs as well. You have to be really careful to not hit that limit and move some files and programs to the HDD to make room. For example, every other IDE besides Android Studio I use (like IntelliJ IDEA) I have installed on my HDD, and even some files needed in Android Studio, because there is not enough room on my 128 GB SSD. If you can afford it, go for 256 GB or bigger together with an additional HDD. All of the recommended laptops at the end of this article have SSDs.

RAM

Right after the SSD, RAM is the second most important spec when it comes to running Android Studio smoothly. As already mentioned, Android Studio comes with a lot of features that help you write code more efficiently and with fewer errors. But these features have to run in the background while you are using the IDE and therefore consume memory.
While Android Studio could theoretically work with less RAM, you shouldn’t go any lower than 8 GB. 16 GB or more would be ideal, but again, not as important as the SSD, so make sure the SSD is covered first. There are different settings and steps you can take to lower the RAM usage of Android Studio, most of which you can find on this Android Developers page. Generally, you need less RAM if you keep other programs closed, particularly the web browser, deactivate helpful but unnecessary IDE features like error-highlighting, and use a physical device instead of an emulator to test your app on. However, keep in mind that all of this can become very inconvenient and again lose you a ton of your valuable time. Carefully consider if you want to give up on efficiency and code quality just to save a few bucks in the short term. Every developer needs websites like documentation pages, Google search, and StackOverflow to quickly look things up on the fly, and maybe some other tools like a messaging service for work. Not using your web browser at the same time as your IDE is unrealistic, no matter your position and skill level. Also, using a physical device instead of emulators makes it difficult to test your app across different versions of Android and on different device form factors.
With 16 GB, you will be able to run Android Studio quite smoothly while using emulators and your web browser at the same time. This is what I am using, and I am very happy with it. Of course, more is always better.

Processor (CPU)

The storage type and amount of RAM are the typical bottlenecks when it comes to running Android Studio, so make sure they are covered before looking at the CPU. However, a powerful processor is especially useful to run the emulator more smoothly and Android Studio itself can utilize multiple cores for some of its functionalities like code inspection, indexing, and to compile bigger multi-module projects in parallel. I often see the recommendation to go for something more powerful than an Intel i3.

But again, keep in mind that we are talking about programming usage only here. If you also want to use other software like for example Photoshop, the CPU might play a bigger role.

Graphics card (GPU)

The GPU is one of the least important parts when it comes to Android programming. You don’t need a dedicated graphics card for normal app development — a CPU with integrated graphics is enough. However, a separate GPU helps running the emulator more smoothly. Also, you might need a more powerful graphics card if you consider also creating 3D games, virtual reality apps or, of course, if you want to play the latest games or use your PC for any other graphics-intensive tasks.

Other things to keep in mind

Those were the main hardware specifications you should consider when you buy a computer for Android development. However, there are some other things that are less obvious but which you should keep in mind too:

Operating system

What operating system you use mostly depends on your personal preference, though I often hear that Windows is slower when it comes to running a project build due to some limitations in the file system. Also, some people have problems with wrong Antivirus settings drastically reducing Android Studio’s performance and build times, but this can be fixed. If you’re comfortable with Linux (or open to learning how to use it), it can give you better performance than Windows. Then you should either buy a laptop with Linux preinstalled or make sure that the hardware properly supports it (by running a quick Google search for that particular device). All the Windows laptops recommended at the end of this post also support Linux. However, if you consider also doing iOS development in the future (or if you just want to use a MacBook) you can’t get around macOS, because Xcode, the IDE used for iOS development, doesn’t run on any other operating system (unless you hack something together).

Screen

Android Studio has a minimum resolution of 1280 x 800 pixels, but a bigger screen with a higher resolution means more real estate to work comfortably. You should aim for 1920 x 1080 pixels, which is Full HD. In terms of coding, there’s not so much to gain from even higher resolutions on a laptop screen. The display size depends on your preferences and the level of portability you need. If you also use your laptop at home, I would recommend getting a second external monitor because it will make working much more convenient. Of course, you can buy one later if you are on a budget right now. Just make sure the laptop has an appropriate port for it. That can be VGA, HDMI, DVI, Display-Port or some other options. Again, all machines listed below provide at least 1 port to connect a monitor.
A touchscreen is obviously not a must, but it can be useful to swipe through websites and it becomes especially interesting when using the emulator, because then you can operate it with your fingers like a real device. However, this currently only supports simple gestures that you could also do with your mouse pointer, like clicking and scrolling. Complex gestures like pinch to zoom don’t work at the moment (but this might change with future updates).
Good screen brightness is important if you want to use your laptop outdoors, but the quality of the colors doesn’t matter that much for programming.

Battery

All these background processes running in Android Studio like on-the-fly code inspection and auto-completion cause your IDE to use up a lot of battery. Android Studio has a power saving mode that disables some of these functionalities, but it also makes coding much more inconvenient because it stops checking your code in real-time. You should probably not use that feature unless it’s absolutely necessary. I tried it and it’s really not fun. How much battery life you actually need depends on how often you have power outlets around. If you never code anywhere where there’s no socket around, you don’t need a long-lasting battery. As a last resort, there are also portable power banks that you can use when you don’t have a power supply around for a longer while, but they might be too inconvenient for day to day use.

Weight

While a big screen and a powerful battery are useful, if you want to take your laptop around with you, it shouldn’t be too big and heavy. Again, if you mainly use your laptop stationary, this doesn’t matter as much.

Keyboard


Average users don’t care that much about a laptop’s keyboard as long as it looks good, but we programmers have to pay a little more attention to that. A badly designed keyboard can actually cause hand and finger pain, more frequent typos, and an overall unsatisfying typing experience.
One aspect that makes typing on a keyboard more comfortable is a high “travel distance” for its keys. That’s the amount of millimeters a key can be pressed down before it hits the bottom. Due to their flat design, laptops generally have a low travel distance of 2 mm or less, and very thin or stylish laptops like the newer generation MacBooks even get below 1 mm. Most people find this less satisfying to type on, and hitting the bottom with high force can make your hands and fingers sore. A too small buffer also makes accidental taps more likely, and the keys more prone to defects when small crumbs or dust gets under them. A little bit of resistance in the keys and a snappy feeling when pressing them down are equally important for a comfortable typing experience and can partially compensate for a low range of travel. The epitome of that are mechanical keyboards, but they are very rare to find in laptops because they are too bulky.
The keys shouldn’t be too small, but some space between them can make it easier for your fingers to navigate. The size of the keyboard itself mainly depends on the size of the screen. Larger laptops often also have a numerical keypad (“numpad”). This can be useful but it also shifts the rest of the keyboard to the left, which can cause an uncomfortable position for your hands.
LED backlight in the keyboard looks stylish and is helpful for typing in dimly lit rooms. But the brightness should be adjustable because excessive brightness can cause eyestrain in dark environments.
Another thing you have to keep in mind is that if you regularly have to use different computers, for example in your work and personal life, you want to make sure that they are as similar as possible, so that you don’t have to constantly switch between different layouts and confuse your muscle memory.
If you want a really ergonomic keyboard (or a mechanical keyboard) to use at home or at your workplace, you won’t get around buying an external one. For equipment like this, it’s good to have USB-A ports on your laptop. Although the smaller USB-C ports are becoming increasingly popular, right now most peripheral devices like keyboards and mice still come with the older USB-A connector.

Trackpad and mouse

Unless you plan to always carry a mouse around, you also want to make sure that your laptop has a good trackpad. It should be precise, not too small, and preferably support multi-touch gestures for faster navigation. No other device gets praised for its great trackpad as much as Apple’s MacBooks, which is partly a result of the good interplay between hardware and software which both come from the same house.
But there are other manufacturers that make good trackpads as well. On Windows laptops, you should try to get a so-called “Microsoft Precision Touchpad” as they work optimally with the operating system and get frequent improvement and feature updates directly from Microsoft.
However, you probably don’t want to use the trackpad all the time, so it can make sense to buy an external mouse as well, especially if you don’t have a PC and also use your laptop at home. I always recommend Logitech’s trackball mice, because they helped me reduce my arm and shoulder pain by about 80%. A trackball mouse is a mouse where you move the cursor over a ball with your thumb rather than by sliding the mouse around. This puts less strain on your arm and joints and it’s also useful if you don’t have much space available (for example in a café or at university). There is a cheaper one, the M570, which is already great, and a more expensive one, the MX Ergo, which is a bit bigger and has some additional features (like an adjustable angle and a very useful precision mode). The MX Ergo is worth the money, but if you don’t want to spend that much, go for the M570. I use Logitech for all my peripherals because they have a “Unifying” adapter, which makes it possible to add all devices over one tiny wireless USB adapter. This leaves the other USB ports available for other stuff.

Which laptop should I buy?

Advertisement
The bottom line is: If you plan to spend a lot of time writing code and building applications, don’t be stingy when you buy a laptop. What’s the point in saving a few bucks on your purchase if you then always have to close and reopen browser tabs, constantly wait for Android Studio to start and for your builds to finish and can’t quickly try things out on different emulators? In the long run, these additional minutes of waiting time add up to hundreds or thousands of hours, which even at a low hourly rate are worth a lot of money. Long build times also disrupt your development flow and make you forget what you were trying to do in the first place.
However, you can often go with laptops that are already a few years old instead of buying the latest versions, and this way save some money while still getting a powerful machine. In fact, at this point in time, this even has some technical benefits. A lot of manufacturers are removing things like the default USB-A ports or internal card readers in their latest laptops and instead add more USB-C ports. USB-C is more modern and depending on the exact specification can do almost everything, from charging the laptop to powering an external monitor, but this also means you need additional adapters to add most of the peripherals available right now, like external keyboards and mice, because most of them still use USB-A. Laptops from the last few years often have both, the older ports and the newer ones.
The following list contains some laptops worth considering. I kept the recommended specs from this article in mind and made sure to cover different price ranges. But please don’t trust my advice blindly. There are tons of different laptops out there and it’s impossible for me to look at all of them. Also, it goes without saying that I can’t guarantee 100% correctness for the information provided here. I tried my best, but please check the specifications yourself and research a little bit before you buy anything! I want you to be happy with your choice. It can also help to read some buyer reviews to see which problems users had in the past and how they would affect you.
Wi-Fi is a standard feature on laptops, so I don’t mention that in each description separately. All the machines listed below have microphones as well. Also, depending on the laptop, some hardware parts can be upgraded and others not. I didn’t look into this any deeper. If you want to know which parts can be upgraded on a device later on, you can check that with a Google search. The list here contains only the specs that you get right when you buy the laptop.

Should I Start with Java or Kotlin as an Android Beginner?

This post may contain affiliate links that earn me a small commission at no additional cost to you. For more information read my Affiliate Disclosure.
“If I want to learn Android development, should I start with Java or Kotlin?”
This question comes up in different communities quite a lot and I will try to clarify it here. To answer it, I’ve looked into different articles, posts, and opinions of different developers and tried to summarize what the general consensus is. This article is more of a reflection what the community thinks rather than my own opinion. I am not experienced enough to tell you if you should start with Java or Kotlin, but I can search for the answer. For this, I tried to filter for unbiased opinions. If someone tells you that Kotlin is the way to go while he is trying to sell you his new Kotlin book or course, it makes sense to keep that in the back of your head.
You’ve probably noticed that Kotlin gets pushed in the Android community quite a lot recently. First introduced in 2011, Kotlin is (compared to Java) a relatively new language. It is developed by the JetBrains team, the folks who also made IntelliJ IDEA (the IDE  on which Android Studio is based). In 2016, version 1.0 of Kotlin was released, and in 2017, at the Google I/O, it was introduced as an official first-class language for native Android development, which means that Google works closely together with JetBrains to fully support and improve the language, and you can use it in Android Studio right out of the box. Kotlin is not meant to replace Java on Android, but rather to coexist alongside of it, so you can do everything with Kotlin that you can do with Java and vice-versa. Google is not planning to drop Java.




However, a lot of developers see Kotlin as the future of Android programming, because it comes with a lot of improvements, like null-safety, more concise code and a ton of additional features and “syntactic sugar” that make writing, reading and maintaining code easier and less error-prone. If you want to see a full comparison between Kotlin and Java, click here.
At first, I wasn’t sure if Kotlin was just a fad and the people supporting it were just very noisy, that’s why I waited a while before I started learning it myself. And while there is definitely a certain level of hype involved, it doesn’t look like it’s going away anymore. The adoption of Kotlin is growing quickly, a lot of big apps like Pinterest and Trello use it already,  Google seems to prioritize it over Java now, and more and more documentation and code snippets written in Kotlin are popping up around the web. As you can see in the screenshot below, in some parts of the Android documentation, Kotlin is now the default tab for code examples, degrading Java to the alternative selection. According to this StackOverflow survey, Kotlin is the 2nd most loved language in 2018. So I think it’s pretty clear that we should not ignore it.









Android documentation with Kotlin as the default tab

If you already have experience with Java and you are able to read and understand Java code written by others, then it’s a good idea to start learning Kotlin and also write your future Android projects in Kotlin from the ground up. You will have a lot of fun and appreciate the more concise code and increased productivity. It’s very likely that Kotlin will be the primary programming language for Android in the future. More and more apps will be written in Kotlin, which means that a lot of Android jobs will require Kotlin skills.


Because it can compile to Java bytecode, Kotlin is 100% interoperable with Java, which means that you can gradually add pieces of Kotlin code to your existing Android Java projects, call Java methods from Kotlin, and still use all the Java libraries and Android APIs. And since the language is developed by JetBrains, it has first-class support in IntelliJ IDEA and Android Studio. You can use it without adding any plugins, and you get proper code-completion, syntax highlighting, debugging and refactoring tools, and other features, like a Java-to-Kotlin code converter that helps you get started.
However, while pretty much everyone agrees that Kotlin is the better language, most people (even big Kotlin fans) recommend to still start with Java as a beginner.





Why?
For one, there are much more Java tutorials out there than Kotlin tutorials and almost every solution for Android problems on pages like StackOverflow from the last years have been written in Java. Most of the documentation is in Java as well and if you start with Kotlin right away, this can make the learning process very difficult and confusing. Understanding the syntax of a language is one thing, but to actually build apps you have to learn how to use the different framework and library APIs. You have to learn what classes you have to use and which methods you have to call in the different phases of your app. And for this you need practice and a lot of examples you can refer to. Knowing the syntax of a language is actually secondary. And most Kotlin tutorials at the moment even compare Kotlin to Java occasionally to point out its advantages, which makes the learning process even more confusing. If you want to learn Android development right now, you can’t completely avoid Java. This might change over the next years, but we are not there yet. Also, while annoying for experienced developers, Java’s verbosity is what makes it so easy to read and understand. Kotlin solves a lot of Java’s pain-points and increases productivity by reducing boiler-plate code, but a lot of what Kotlin does makes more sense when you have some knowledge of how Java works.






Java is not going to be obsolete, even on Android. While I am writing this post, a discussion thread on Reddit appeared, asking the “Java or Kotlin for an Android beginner” question. The answer with the most upvotes comes from Zhuinden, who himself uses Kotlin extensively:
Java becomes even more important if you might decide to work in a field outside of Android later. Kotlin is not exclusive to Android or the JVM – it can also compile to JavaScript or native code, it can be used for server-side applications, web frontend, or pretty much everywhere else – but currently Android is it’s biggest (and loudest) market. In the enterprise world, Java is still the most important and widespread language and that is not going to change anytime soon. A lot of the existing code in big companies is written in Java. Getting a whole team to adopt a new language is challenging and rewriting working code usually not worth the investment. As a programmer, you spend most of the time fixing and extending already existing systems rather than writing completely new software from scratch, which is why there are disproportionately more job postings for Java than for Kotlin developers. I just ran a quick search on indeed.com and found 77,487 job postings for Java developers in the US, but only 1249 for Kotlin (and it was usually just listed as a nice-to-have skill, rather than the primary language).
The bottom line is: Even though Kotlin is the new big thing, it is reasonable to start with Java and then learn Kotlin later on. Java is still more widespread and it is hard to find a job with only Kotlin skills right now. Java is robust, battle-tested and easy to learn. Since Kotlin and Java are 100% interoperable, you can start implementing Kotlin into your existing Java projects when you feel ready and it won’t break anything. Once you have some experience with Java, learning Kotlin as an additional language will be pretty easy. It’s not like you have to start from scratch.'



Just don’t get religious and stubborn about programming languages. As someone who has spent a lot of time learning Java himself, I am aware that it is important to stay open to new experiences. Learning new things is what makes programming so exciting. While all my video tutorials are in Java right now, I am going to start a Kotlin beginner tutorial on my Youtube channel soon, where we will learn the language together. I will release these lessons in small, bite-sized pieces, and I will keep making my other tutorials in Java for now. So you can keep learning Android development with Java as your primary language and still get a hold on Kotlin parallel to it when you feel ready.
What do you think about the Kotlin-vs-Java decision? Let me know in the comments below!

5 Non-Technical Skills and Traits You Should Develop as a Programmer

Learning the technical stuff when trying to become a software developer is not easy, but at least it’s pretty straightforward. The tutorials are out there and you can teach yourself all the necessary programming and computer skills with books, courses and Google.









But there are also non-technical skills and traits that you should actively develop if you want to become a better overall programmer and increase your chances of getting hired at a good company and build a fulfilling career. Employers look for these characteristics in potential candidates and colleagues want to work with team members that are not only competent, but also have certain soft skills.
Don’t fall into the trap of thinking that your social skills and personality traits can’t be changed. You might see yourself as a shy, uncreative or lazy person, but those are all things that can be trained and improved (significantly) by proactively practicing them and adopting good habits.
However, please note that at the time of writing this post I’ve never worked a job as a programmer myself. I am still in the process of learning to code in my free time, and as part of this process, I research topics like this one in order to understand what lays ahead of me. This post – just as all my other posts and tutorials – is a way for me to summarize my findings and own thoughts for later reference. So take this list with a grain of salt.
Ok, here are the skills and traits that were most represented in my findings. The list is not exhaustive, because I tried to boil it down to the most significant ones:

Communication

This is probably the most important skill of them all (and not only for programmers).

If you tinker on a small project in your free time, you might get away without having to interact with a lot of other people along the way. But if you work on a bigger project and create software as part of a team, you have to learn how to communicate properly, how to express your thoughts, explain ideas and most importantly: how to listen. This is especially true if you work as an employee for a company, where you have to get along with superiors and colleagues. In today’s workplaces, programmers usually don’t work in isolation. Instead, they have to collaborate and exchange ideas with different departments of the company, like managers, marketers and designers. They have to understand the requirements of a project and tie all the pieces together into a working software solution, all while coordinating their work with the other developers of their team, so the codebase doesn’t end up messy and unmanageable. Not to mention that you have to be able to articulate your thoughts and appear respectful to master a job interview in the first place. And when you become a mid-to-senior level engineer, you might even be positioned to mentor your company’s junior engineers, where you have to be able to teach.
Since you work with a wide range of people, you have to learn how to explain complex programming concepts in a way that people with different levels of technical knowledge can understand them too. Don’t use slang, jargon or super technical terms if you’re not talking to an expert and instead try to come up with metaphors and parallels with other fields. This is also important if you work as a freelancer who builds software for clients that may know nothing about programming and just have a vague idea in their mind. Proper communication here avoids misunderstandings and problems down the road. If possible, schedule a video call for the project interview, so you can communicate freely and build trust right away. If the client feels understood and comfortable, it raises your chances of getting the job in the first place.
Whenever you talk to other people, no matter if expert or amateur, pay close attention to what they are saying. Show that you are genuinely interested by letting them speak without interrupting them. Ask clarifying questions and rephrase their sentences in your own words to ensure that you understood them correctly. This way you can get rid of any misconceptions right then and there. If you work in a team, let your colleagues know what you are working on and inform them about issues you encounter. Be honest when something is wrong or when you have a different opinion, but always keep a friendly tone. An incredibly good book about social interaction is “How to Win Friends and Influence People” by Dale Carnegie, because it contains actionable tips and not just empty phrases. Getting along with other people is actually not that hard if you follow some simple rules, like never criticizing them directly, appreciating their work, showing respect and letting them speak. You should generally avoid negativity when you have to do with other people. That’s equally true in your professional as well as in your personal life. Complaining is pointless in 99% of the cases, makes you unhappy and annoys everyone around you. You shouldn’t hold back when something is wrong, but how you deliver the message matters a lot.
If you are shy, socially anxious or come over as grumpy, you have to practice. There is no way around this and avoidance is a bad longterm strategy. A helpful technique to get over yourself in uncomfortable situations is “the 5 second rule”, which I already talked about in my procrastination blog post. You can also consider investing in communication workshops and courses.

Throughout your career, you probably want to visit various conferences and get in touch with other developers to socialize and build a strong network. You can’t do that if you can’t get out of your shell. You might also get into situations where presentation skills are needed. Maybe you have to explain something to a group of people at your workplace or you have the opportunity to give a talk at an event. That’s a great chance to make yourself a name in the community and push your career further. But if you are like most people (including me), the thought of speaking in front of a large crowd already gives you anxiety and you know that you will be much worse when you are actually standing on stage in front of tens or hundreds or thousands of people. I have mild social anxiety so I researched about that topic quite a bit and this is what I found:
There isn’t really a way to get rid of stage fright and you will probably never feel completely calm before such an event. But a good trick to cope with this is to actively reframe the anxiety into excitement. Turns out these 2 emotions actually have the same effects on the body, we just interpret them differently. They both raise our heart rate and make us sweaty and nervous. But we perceive one of them as good and the other one as bad. A lot of famous speakers harness their anxiety by telling themselves (verbally) that they are excited about their upcoming talk. Next time you are nervous about speaking in front of a group, say “I am excited” out loud and repeat it over and over again. Tell yourself what you are excited about: the opportunity to present your ideas, to help other people, to make yourself a name. It might seem stupid to verbally tell that to yourself, but it actually helps to reframe your thoughts and emotions from a threat mindset into an opportunity mindset, which in turn calms you down and lets you perform better. This is a technique I came across over and over again in different books and it’s used by a lot of good speakers.
But besides verbal communication, there is of course also written communication over email, chat, messaging systems and shared documents and if you work remotely, this might be your primary way of contact to your coworkers. Text messages are much easier to handle for shy people, but they come with their very own challenges, like typos, time delays and misunderstandings. Proofread your messages before you send them and always think about how they will be received by the other side. Sarcasm is harder to understand in written text, so if you mean something funny or not serious, an emoji could be appropriate. Just don’t overdo it in a professional environment. Prefer public channels and mailing lists over private messages if other people could benefit from the information too. Keep your messages clear and short. If that’s not possible or if it’s very urgent, a phone or video call might be a better choice. Part of good communication skill is choosing the appropriate channel.
Consider installing a spell check plugin like Grammarly into your browser. I myself have trouble creating proper English sentences because it’s not my mother tongue, but spell check tools at least help me get rid of the worst mistakes and typos.
My grammar is probably bad too, but that’s why I am practicing a lot. You don’t have to be a genius writer, but try to pay attention to slips that actually change the meaning of sentences, like writing “two” instead of “too” or “their” instead of “there” (or vice versa). Also check your resume, profiles or anything that potential clients and employers could look at when they consider hiring you, because they probably don’t want their code to be written by someone who is sloppy.

Openness

Advertisement
As a programmer, you have to be open to new experiences and can’t clinch too much onto a certain approach, tool or even programming language. Frameworks and best practices change all the time and you have to be willing to constantly learn new things, try out new techniques and get rid of old habits. Don’t get religious about technical stuff and always keep a certain level of curiosity. Just try to approach new concepts with the same awe and wonder you had when you learned your very first programming language. Enjoy it and don’t focus on the negative parts.
You should stay up to date by reading tech blogs in your niche (like android-developers.googleblog.com), following other developers on Twitter and subscribing to Youtube channels that talk about topics you are interested in. If you are an Android developer, subscribe to the Coding in Flow Youtube channel, because I release new Android tutorials every week.
Also stay open-minded when it comes to criticism. If someone finds errors in your code or in your way of approaching a problem, see it as a valuable chance for improvement rather than a personal attack.

Creativity

As a programmer, you have to solve problems. Ultimately, this is what software is all about. And while you are building an application or website, a lot of smaller problems arise along the way. Finding the appropriate solutions and keeping everything maintainable involves quite a bit of creativity. You have to understand the requirements of the project or task, design the code architecture, decide on variable, method and class names, choose between different tools and come up with your own algorithms whenever there is no ready-made class or library. You have to think through different use cases and account for users’ choices, errors and interactions with other systems. Programming is a bit like solving a difficult puzzle.
And then, of course, there is also creativity required when it comes to things like designing user interfaces, coming up with ideas for new features or branding and marketing a product. In a company, these things might be done by someone else, but for your own hobby and freelance projects, it is good if you have some skills in those areas as well. If you are creative, you can also come up with your very own app ideas and maybe build something that helps other people and generates you an additional income.
A lot of people think of creativity as this inherent talent that only gifted people have, but in reality it’s actually just the application of knowledge and experience in new and unique ways. Sure, there is some talent involved (like for any skill), but you can get more creative simply by getting a lot of input, trying out different things and experimenting with them. If you focus on learning new concepts and then spend enough time applying them to different projects, you will get better and better at finding creative solutions for new problems that arise. For this, you have to be open to new experiences, tools and frameworks like we talked about in the chapter before.
However, creativity needs its place. Always keep in mind that what you are building should make life easier for others. So adhere to conventions and don’t change things that have been proven to work just because you feel like it.

Organization

Since there is always something new to learn, changes to make and problems to fix – often all at the same time and with short deadlines hanging over your head – you have to learn to organize your time and energy properly. If you get work done on schedule, it shows your employer that you are reliable and that your team can count on you.
You have to prioritize and decide what is most important right now. This also means learning to say “no” when necessary. This could be to your boss about a not well thought out new feature, to your colleagues who want you to help them with their problems or to potential new clients that don’t fit into your schedule. Just remember to explain your reasons in a friendly and respectful way.
Advertisement
Self-organization also helps you keep the rest of your life together. You might sometimes have to do overtime to fix a bug or solve an urgent problem, or you need a while to learn a difficult new concept and have to spend a lot of extra hours in front of the PC after work. If your day is not organized properly, these occurrences will completely wreck your habits. You should avoid slacking off when it comes to sleep, sports and nutrition, because this will always cause a backlash into your professional life in form of low energy, bad performance and reduced cognitive abilities. As I explained in my How to Stay Healthy as a Programmer blog post, physical fitness not only saves you from chronic pain and sickness, it literally makes you more intelligent. You don’t want to miss out on that advantage. Besides that, a healthy, disciplined lifestyle makes you happier and reduces the chances of getting depressed. And the more balanced you are, the more other people want to be around you.
Self-organization becomes especially hard if you work remotely or as a freelancer, because without supervision you are not only responsible for your personal time, but also your working hours. And no matter your job, you should always find some free time to tinker on hobby projects and to learn new things.
When it comes to getting things done and being happy with my working habits, I found that nothing works as good as a schedule. When I plan a task in advance, I do it, no matter if I feel like it or not. It gives me a clear structure and direction for my day and makes worlds difference in terms of procrastination and efficiency. I always feel in control because I know where my time goes, I know when I can relax without feeling guilty and I know that every important task gets enough attention.
If you want to try it, take out our calendar create time blocks for all activities and tasks that are important to you. You should schedule everything that can be planned in advance: Work, learning, health and fitness, but also leisure, family, friends and other things you enjoy. But make sure to stay flexible and don’t overplan. Don’t schedule every task in detail, but rather create blocks for different categories, like certain projects. Read my How to Beat Procrastination blog post if you want to learn more, because there I explain it in more detail.
But organization doesn’t end at your schedule, your code has to be organized too. It should be structured in a way that other people including your future self can work with it later. Software architecture, proper documentation and good coding habits make life easier in the long run for everyone involved. You learn this simply by reading/watching tutorials and practicing a lot.

Perseverance

As a programmer, especially when it is your job, you will experience situations of pressure, like short deadlines, last-minute changes, untraceable bugs and code that is difficult to work with. And on top of that, you have to constantly learn new things and keep up with the latest technology changes. This can be a lot of fun, but from time to time it will also be hard, stressful and frustrating and you have to be willing to struggle a bit every now and then. Effective, deliberate practice often comes with a certain level of discomfort, but every time you figure out a new concept or solve a difficult problem, you will feel accomplished and proud.
Don’t be afraid to make mistakes. This has been repeated so often that it sounds cliche, but most people don’t actually apply this to their lives. They think of mistakes as failures rather than opportunities to learn, which is one of the most destructive mindsets one can have.
Make sure to read my blog post about the growth mindset, because it is crucial in order to be able to endure difficult phases and cope with mistakes and setbacks.

Ok, that’s it for my list. I hope this post inspired you to take your character development equally important as your programming skills. Of course there are more soft skills and traits to develop, but in my opinion those were the most important