Developing the basics: programming myself, post thirteen

treasureMap_13

Problem-solving strategies

<< Read the previous post from the series     Read the next post in the series >>

So we are really now starting to embark on a whole new discipline that comes with programming. Logic and problem-solving. We now have enough of how and what we can do with with the code behind us that we can work out how to use the code, what different things do in the code, or if we don’t know them off by heart yet, we at least know how to look up answers and adapt and improve the results. But it is time to really stand on our own two feet and work through problems from scratch and solve them for ourselves.

The adaptive Python PyCharm Edu course from Stepik promises this. It’s a system to practice our coding and problem-solving abilities in an environment that is a bit more forgiving as we can get hints from the course. But to prepare for this next stage, let’s have a look at some problem- solving strategies and techniques that may come in useful.

Problem-solving can only be improved by you guessed it… problem-solving. If you struggle to solve problems, you are not alone. Anytime you come up against some intellectual task that can cause you a feeling of pain; this is your body’s response to really activating your brain. It hurts, it is frustrating, it makes your blood pressure rise, why even bother then, why not just bathe our brains in a nice relaxing bath of BuzzFeed articles? It is time to exercise your brain! Let’s start with a light warm-up.

Without a calculator work out the answer to 27 x 13.

Continue reading

Posted in Education | Tagged , | Leave a comment

Developing the basics: Programming myself post twelve

treasureMap_12

CS50 review part II

<< Read the previous post from this series        Read the next post in this series >>

Finally!

I have finished the CS50 course. The future is there for the taking. I won’t lie this was a big undertaking. I think though overall this was a really good course to get through as it covers a lot of computer science principles, helps you to get familiar with some of the most useful developer technologies and makes you think harder about computer programing and computers and what is happening under-the-hood. There are a lot of directions to go from here and things to build on, though there is still a lot to do with Python I am definitely not finished yet.

Continue reading

Posted in Education | Tagged , | 1 Comment

Developing the basics: Programming myself, post eleven

treasureMap_11

CS50 review part I

<< Read the previous post from this series  See the next post in the series>>

The Harvard University computer science course CS50

This course has been highlighted by a lot of resources as a great jump off point for programming and I have to give it its due, this fame is well deserved. If you are coming to programming with no prior background it will take you through the concepts of computer science and familiarize you with the most important aspects. The lectures move fast, especially if you watch them in 1.5x speed as I did, as they are pretty bloody long typically 1hr 45 minutes, so you need to really concentrate which can be difficult. If you take 3 minutes after the lecture to try and summarize to yourself the points of each lesson you will retain what comes at you better for gaining some very useful and practical information about computer science.

Continue reading

Posted in Education | Tagged , | 1 Comment

Developing the basics: Programming myself, post ten

treasureMap_10

A-Z of technical coding terms

<<Read the previous post from this series       Read the next post in this series >>

After 12 weeks of computer programming, you come to get to know some common lingo which you can use to impress your Nan with over breakfast. Here is an A-Z of some terms to get you through the day. If you are wondering how the studying CS50 is going… it is hard, interesting, fun, and repeat.


A – Algorithm

The specific instructions used to achieve a specific task. In the workflow, it would go:

Input > Algorithm > Output.

There are better algorithms to achieve certain things. See https://en.wikipedia.org/wiki/Analysis_of_algorithms for more information on this though. In a high-level language, you don’t have to worry too much about these recipes as they are done for you, all you have to do is call a function like sort() and not worry about what is going on under the hood. Unless of course, you are into that.


B – Boolean

True or false, yes or no, on or off, Boolean is concise as these options take a byte to perform.


Continue reading

Posted in Education | Tagged , | 1 Comment

Developing the basics: programming myself, post nine

tresureMap_9

I am too old for this Git

<<Read the previous post in this series     Read the next post in this series>>

Git. No, not the guy who pushed in front of you at the checkout, and then paid in pennies which he counted out one-by-one losing count halfway through, but the Version Control System (VCS) which has become pretty much used by everyone in the open source development world https://github.com/.

It is getting to the point now where knowing how to use this is probably going to be pretty helpful, especially down the line.  My current version control system of commenting out the code when it works and copying and pasting the code with the newly added changes is maybe not the most efficient nor effective way to code.

So it is time to learn a bit about Git. Considering there are full-on books about the tool, what I am going to cover in this is the very basic necessities to try and explain how I understand it, which might hopefully help you get more out of the system. Or at least inspire you to mess around with it.

I will also share some of the resources people have recommended to me, so you can go on and do some further reading on it if it is something you want to learn about too.

What is this Git

Git has been around since 2005. It is a Version Control System like I mentioned above, which basically means it is a place to keep all the different versions of your files – so the original files, the additions, the bits you decided were rubbish and deleted, all of it; but with an added twist. If you go mental and change something which then goes on and breaks the whole program, then you can revert back to the old working file. It also allows you to branch the project, which means basically you can take the original and make edits (commits) to the file, play with it and test it before suggesting (pull request) to add these changes to the original main file (merge and deploy).

Simple enough. But if you go onto the git website https://github.com/ and make an account, sign in and all that annoying stuff, then you get to look at a page like this:

Continue reading

Posted in Education | Tagged , | Leave a comment

Developing the basics: programming myself, post eight

treasureMap_8

The foundations to build on

<<<Read the previous post in the series   Read the next post in this series>>

I am now on post 8 which for reference is about 8 weeks in, and it is time to do a quick review and check that we are still on course.

My original study plan looked something like this:

Monday: 2 hours Adaptive Python
Tuesday: 3 hours Headfirst Learn how to program
Wednesday: 4 hours theory CS50
Thursday: 4 hours Adaptive Python
Friday: Rest day
Saturday: Rest day
Sunday: 4 hours Introduction to Interactive Programming in Python

 

In theory great. In practice not so great, as it started to look more like this:

Monday: 2 hours of nothing
Tuesday: 3 hours of nothing
Wednesday: 4 hours of nothing
Thursday: 4 of nothing
Friday: Rest day
Saturday: Rest day
Sunday: 4 hours of panic and regret and hard study.


 

I managed to turn it around a bit by building in some triggers, mainly PlayStation, to try and form a study ritual. PlayStation for an hour, then onto studying. This worked well for the HeadFirst book, but now I am going back to the other courses, and they are different kinds of courses completely, and it will be interesting to see if they work as well with this system. I think taking the courses one at a time is the best method, so now I will start looking into the computer science side more and focus on the CS50 course from Harvard University as it has a lot of people who advocate for it.

Continue reading

Posted in Education | Tagged , | Leave a comment

Meet Anna, the documentation team lead for IntelliJ IDEA

Anna is a technical writers’ team lead at JetBrains. In this interview, she let me look under the hood of our technical writing. Online documentation is one of the pillars of our connection with developers, and Anna is dedicated to making it even better and more user-friendly.

Q: Anna, how long have you been working for JetBrains? What background do technical writers normally have?

I’ve been with JetBrains for three and a half years.

Though any company that produces software products has technical writers in their staff, in Russia you still cannot get a degree as a technical writer. So most of the training takes place on the job and relies on experience and self-education. In my team, there’s a combination of people with a technical background and excellent English skills, and people who have a language degree, like myself.

Q: So have you worked in IT since the beginning of your career?

As a student, I took a job in a company called PROMT that is widely known as translate.ru. I wrote linguistic algorithms for machine translation from German into English, and this was one of the most interesting things I’ve ever done. It was really exciting to parse down a language into patterns that you could formalize and feed to a machine translation tool. So, yes, my first job was actually in IT.

Then I taught English to adults for several years, and ended up as a corporate teacher in Borland. Funnily enough, some of my colleagues here at JetBrains used to be my students back then. When Borland closed down, I was determined to stay in IT, so I took  my first job as a technical writer in a huge company called EMC – now acquired by Dell – that sells data storage. I had no experience in technical writing then, and my boss gave me a paper book about good technical writing that was several inches thick! However, all the new tasks I had to accomplish and getting to know the technology was overwhelming, so I didn’t have a chance to open this book until a few years later, when I realized I’d already figured out most things for myself.

Q: Why did you decide to take a job at JetBrains?

Actually, I had wanted to join JetBrains for many years. I even had an interview for TeamCity 7 years ago, but my skills did not prove sufficient back then. My previous job was more about development than anything I had done before, and it provided me with some essential skills, so here I am now.

The main reason – apart from the fact several people I knew were already working for JetBrains and kept telling me what a great company it was – was that I was getting bored with doing things that I already could do well. It did not require much effort on my side, and there wasn’t much room for development. And, as scientists tell us, you have to train your brain, just like you train your muscles, or it starts to decay.

IMG_0542-Edit[1]

Q: How is technical writing for JetBrains different from other companies?

In many companies, unfortunately, documentation is still written merely because products are supposed to be delivered to customers with documentation. No one really stops and thinks why they write it, who they write it for, and what business problems it solves. And your job can’t be rewarding if you go to work every day and do something that you know doesn’t make the world a better place.

Here, at JetBrains, we want to make a difference. Everyone is so passionate about what they do, and the company is customer-facing, so you always have a chance to speak to your users directly and find out if you are doing the right thing.

Q: Many people have a very vague idea of what a technical writing job is. Can you lift the veil and tell us a bit about your daily routines?

Ha-ha, you’re right. I’ve given up explaining what technical writing is to my friends who are not in IT. My husband prefers to omit the “technical” part and proudly tells everyone his wife is a writer!

Technical writing is an engineering job just like any other job in IT. It’s not only about creating content – it’s also about designing information flows. If you have written quality content and your users can’t access it, what’s the use of it anyway? You might just as well have not written it at all.

Every day we ask ourselves questions like,

  • “How will our readers land on our help pages?”
  • “How will they read them? Will they just scan through, or read A to Z?”
  • “How do readers navigate around our web help?”
  • “What questions do our users most frequently ask related to a certain feature or technology?”
  • “How do we design our documentation so that it answers these questions and users are not forced to wade through tons of information they don’t really need?”

To help us answer these questions, we employ a number of tools and information sources.

I’m subscribed to a dozen tags on StackOverflow, and my everyday morning routine is going through notification emails from StackOverflow and checking out which problems our users encounter when performing specific tasks with our product. So when I start writing about a certain topic, I already have an idea on how exactly my documentation should help our users and what issues and scenarios it should cover.

Actually, before we start writing anything big, we spend a long time making up a list of use-cases and scenarios, which are then translated into the document structure. We’ve been following this process for some time now, and this seems to be the only way to ensure our documentation is not written simply for the sake of documenting whatever functionality our products have.

Q: How do you measure your success?

We get input from our support team, as well as from a feedback widget that we are redesigning at the moment to be able to get some measurable data on whether our content was useful to our readers.

We are also trying to employ different tools to measure our success and verify if the new approaches we are applying are viable. For example, we can use Google Analytics to check if changing a document structure helps it rank higher in Google search results.   

We are learning to write for SEO – and this is a fascinating new world for us. Isn’t it amazing that by knowing how search engines index content, you can use tricks to make it more discoverable?

Q: Is it difficult to learn the technical stuff?

This is one of the biggest challenges in my job. I’m not a programmer, but I write for developers, so of course I need to have some expertise in the areas I write about. Our product (IntelliJ IDEA) is very big, and of course, you cannot be an expert in every framework or technology it supports. Each writer in my team covers a certain set of features and technologies, and sometimes you need to spend awhile to understand it and to play with it.

Q: Do you find yourself thinking about different projects?

There are a few things that I’d like to get deeper into, for example designing interfaces and user experience. I have some superficial experience in this, and we actually work together with our UX architects to improve our product interfaces and rewritie UI texts, to help users perform their tasks without wondering what each option or action means.

I’d also like to write marketing materials and participate in promoting our products in the developer community. But at present, I’ve already got enough challenging and interesting tasks on my list that will keep me busy for quite a while.

Q: How is your team organized? Is there anything that surprised you at the beginning?

We are part of the development team and participate in daily dev meetings to stay tuned to what’s going on.

At my previous company, I had to fill out a huge Excel spreadsheet at the beginning of each release cycle with all the requirements broken down into atomic tasks, all risks listed, all sign-offs, etc. We could not release anything before finishing all these tasks. To make a change in the initial plan, you had to get half a dozen approvals.

On the IntelliJ IDEA team, it’s all much more agile and flexible. You don’t have bosses who pass down a plan to you and tell you what to do. So we, writers, have to keep our ears to the ground and extract information from a variety of sources to make sure we don’t miss any notable changes and new features.

Q: Where do you see your biggest challenge coming from?

Right now this would be a major reworking of our help system. We are moving away from a reference-based model; we want to focus more on specific tasks that users perform with our products, and on how they can become more productive when using them. Since the existing documentation is huge, this is not something you can accomplish quickly. So, with the routine maintenance tasks constantly piling up,  the biggest challenge for me is to bring this project to completion and not let it become a never-ending quest.

Q: Based on what you’ve said, I suppose you don’t have time for anything else apart from your job, do you?

Work-life balance is not my strongest part, indeed. But I have a little son who will turn 2 soon, and of course, I try to spend some time with my family. It’s great that at JetBrains you can work flexible hours, and that lets me take my son to a swimming pool, or to the playground a couple of times a week.

Last year I also got involved in floral design and making door wreaths, and I really love this. I only have time to practice at the weekends, so I have a few dozens of ideas that will have to wait before they come to life. I really hope I’ll find some time before Christmas 2018 to decorate our JetBrains office with a huge festive Christmas wreath.

Q: Can you think of three words that come to your mind when I say “JetBrains”?

Freedom – that’s something I value very much. To me it does not mean “chaos.” Freedom is a chance to try things out, learn new stuff, make mistakes and take responsibility. We’ve grown much bigger since I joined the company, but luckily we haven’t turned into a company where you have to go through a number of formal steps and approvals to implement something you think is right for your job.

Drive – this is not just a motto for me. Everyone at JetBrains is passionate about what they do. I think our recruiters are doing an amazing job finding people who are enthusiastic and who want to do cool stuff.

Respect – working at JetBrains, I feel that the company respects me and takes care of all its people. These may be big things like good medical insurance, or tiny things like my favorite chocolates or an adorable design for coffee cups. But all together, these things make me feel happy at work.

Posted in Interview | Tagged , , | 2 Comments

Developing the basics: programming myself, post seven

tresureMap_7

How to pseudocode problem solve like a boss

<< Read the previous post in this series    Read the next post in the series>>>

Before starting to put together any new program it is best to think it all through and make sure that the problems you might come upon have been mitigated in advance.
Without putting in all the code and making sure it works as it should there is a far simpler way of tackling the problem in the first place, one which I am starting to learn and quickly realizing the benefits of. If you want to make things from scratch this is probably the best method of hitting the problems early. Pseudocode.
Pseudocode is a very high-level representation of the code. So you can put down the principle of what you need to do and work out how to do it and make sure nothing is missed. Which though it adds a bit more work at the beginning of creating the program, inevitably it will save time down the road as you will have already begun to think about how it comes together and make sure that nothing was completely overlooked.
There is actually not a real syntax for pseudocode, it is mainly for human understanding so it doesn’t need to go into so many of the details a computer would need to read it properly, so it is quicker to put together and play through without having to debug to get a result. It will help you put together the sequence you will need to follow to get the result, and also it makes it easy to visualize the process you can draw out the code and make it easier for you to see how it fits together.
As we know all computer programs are essentially an input, a process, and finally an output. So this is where you start:

INPUT
PROCESS
OUTPUT
Okay, we’re done let’s go play some PlayStation. Oh right, that isn’t really enough… unless that is what we were trying to achieve… Let’s make a plan for say a computer game like Rock, Paper, Scissors… Lizard, Spock. http://www.samkass.com/theories/RPSSL.html

Continue reading

Posted in Education | Tagged , | Leave a comment

Developing the basics : programming myself, post six

treasureMap_6

Playing around

<<Read the previous post in the series     Read the next post in the series >>

42 and the meaning of life.

So a couple of posts ago, I shared with you a small, albeit incredibly awesome, program I made “what is the meaning of life” which asked you to guess the meaning of life. It wanted the number 42. Anyone who is familiar with Hitchhiker’s guide to the galaxy will know that this is the answer the computer Deep Thought gave as the answer to life, the universe, and everything. Douglas Adams was known to be a bit of a computer geek, so it would be nice to theorize that he chose 42 with a hidden agenda. As in the ASCII language, 42 is the designation for asterisk, which is the wildcard character in regular expressions, so it is whatever you want it to be, thus making the meaning of life 42 or “whatever you want it to be.”

Unfortunately, it isn’t this clever:
“The answer to this is very simple; It was a joke. It had to be a number, an ordinary, smallish number, and I chose that one. Binary representations, base 13, Tibetan monks are all complete nonsense. I sat on my desk, stared into the garden and thought 42 would do. I typed it out. End of story.” – Douglas Adams – from an interview by the Independent.

The effects of programming: you double check everything

It did though seem feasible like it was information which could be good to use. But like in this series, I hope that I can dig out false information, false promises and genuinely provide you with what I find works for learning programming and what you can maybe try yourself.

The epic world of computer science is gradually getting more and more accessible now as I discover new things that are possible to do with code. What has been really interesting are the things which other people have already put together for developers, to make achievable software I wouldn’t have believed was possible after only a couple of months.

Continue reading

Posted in Education | Tagged , | Leave a comment

Developing the basics : programming myself, post five

treasureMap_5

Head First Programming book review

<< Read the previous post in this series    Read the next post in the series>>

Over the last few weeks, I have been concentrating on just one source of learning to program. I’m hoping that focusing on a single course will actually make it much easier to make progress with the learning. The book I have been using was Head First Programming by Paul Barry & David Griffiths.

First and foremost it is worth mentioning, there is absolutely no affiliation program going on here, I don’t get paid by them, interact with them or anything. The Head First series is pretty renowned for providing people who want to learn technical subjects with a concise, interesting, and broad way of doing it. They have a great method for teaching which takes into account a lot of the most up to date learning theory techniques, and cognitive science to create a textbook type course which is really easy to grasp and get a lot out of.

 

How long do you need and is it worth it?

I originally gave myself two weeks to get through this book as it is about 400 pages, and as the pages have a lot of graphics and white space on them I figured this would be enough. It isn’t. I am still working through it after three weeks, though the end is in sight. I would say that if you just did this book, then a month would be a good amount of time to set aside to get through it. But is it worth the time? Honestly, I think this is one of the best kind of books on programming I have so far come across. The examples are interesting and leave a lot of room to expand on later, the exercises on top of this (so long as you don’t cheat) force you to recall a lot of what you are learning, and so it does tend to stick better.

Continue reading

Posted in Education | Tagged , | Leave a comment