Показаны сообщения с ярлыком me. Показать все сообщения
Показаны сообщения с ярлыком me. Показать все сообщения

пятница, 1 августа 2014 г.

Aging

I was pretty fortunate to be born in the middle of summer as this gives me two very well defined and perfectly positioned points in a year when I am willing to reflect on the results of recent months. In January everyone’s year ends to give way to a new one and in July my own age gets incremented – both events suit well for peeking into past and future. So, a couple weeks ago I turned 25 and this somehow made me think about what does it mean to get older apart from the fact that every year you have to tell different numbers when answering a question “How old are you?”

I mean I am not a complete idiot an I know that over the time of my existence the Earth has done roughly 25 full circles around the Sun, cells in different parts of my body died off and got replaced with new ones many times and all that stuff. In other words, something changed in the world and something changed in me as well: I used to be an infant, then a little boy, then kept growing larger and stronger and now I am this guy with a laptop in a park. I also know that from this point on I will likely grow weaker – not stronger, not until I put some serious effort into avoiding this. Still, physiological aging feels as boring as it is inevitable.

Being a bit more intelligent than a rock, I also acknowledge that there is a social aspect to aging. When I was born I wasn’t actually a member of any society at all and was hardly capable of being one. I gradually started interacting with my parents and other family members and being a part of a small group of people. After learning some stuff from them as well as other guys of my age one day I became eligible to enter a larger community – an elementary school. From there I advanced to the high school, then university – both of them taught me some crucial skills and knowledge making me potentially valuable for Humanity. Finally, somewhere close to the 7th of 6 years of my study at the university I learned that I can not only consume what society gives me, but also give something back. That’s when I took my first part-time job in software development. A year ago I finished study at the university and working as a programmer became my fulltime activity, so that I moved a bit closer to the production side of the consumption-production gauge. This is certainly a very important aspect of aging, yet the same as the biological part of the matter it doesn’t seem interesting.

Continuing the search for the “essence of aging”, I also remember of responsibilities: the older one gets the more responsibilities they are supposed to carry. Until some time you have only to be doing what others tell you, so you are only responsible for not breaking the simple rules they set for you. Later, one takes the new, sometimes less clear responsibilities associated with study or job. Furthermore, one may take responsibilities for others' well-being and well-fare when they get married and give birth to children. So, the general idea is that children are responsible for nothing, while grown-ups are in charge of everything and that’s what I was taught in school and elsewhere. Even though I believe that’s true – to the extent anything about the way human society functions can be true – that’s not something that I have been facing a lot during the recent years. I mean I did get new responsibilities when starting to work as a developer or when obtaining the driver’s license, but all these feel so natural that it is hard to define aging in these terms.

What does seem to be essential to aging for me is learning and, most importantly, learning that most things won’t do themselves. Learning itself is crucial and it is often true that the older you get the more you learn – sometimes that’s what makes you capable of going further. Still, it just happens to come along with aging. On the other side, understanding that some things are just not going to happen the way you want them until you push them hard into the desired direction comes to me as a manifestation of the fact that I am getting older. 

There are plenty of examples of how this simple idea might jump at one here and there. For instance, long ago the laces on my shoes used to get tied properly without any help from me. Later the magic vanished and I discovered that one has to put effort to get out of home without losing their shoes. Something very similar happens with keeping shoes clean – for some time while you are trying to accustom yourself with the laces, magic keeps cleaning your shoes, but later it evaporates as well. You notice that shiny footwear becomes bleak and dusty, dirt sticks to it and doesn’t go away overnight any more. This way every year one sees some magic being drained away from their world.

This thought is not something original or new, but it struck me this year. I mean my parents stopped cleaning my shoes long ago – that’s other things that drew my attention to it. For example, I always used to be a very slim person. During some periods of my life this was supported by my attempts to do running consistently, but even when I was much less physically active I remained slim and hardly seen any body fat. However, the situation changed dramatically about a year ago. Somehow, after I took my current position and started to work full-time at the office my body began to build up fat. I don’t fully understand why did this happen – the amount of physical activity didn’t change much between the university and the job. One of the reasons may be that my life became more determined than a couple years ago when I had much more options for where to sit with a laptop and study and when to change the place. Anyway, some months ago I noticed that I got much fatter than I have ever been before and that my body is not going to remain slim or fit without some help from me anymore.

I also made similar discoveries closer to the software development field. While I already knew that code doesn’t write itself (although, there is meta-programming!), it turned out that there is still some place for surprise. My Windows Phone development adventures taught me one thing for sure: the products that I make won’t market themselves – not until I put significant effort into making them stand out and forcing potential customers to see them. Put in other words, my customers won’t come to me until I reach out and find them. So, basically nothing is going to happen by itself in terms of distributing and marketing my products – I have to do something to show them, explain them and sell them.

All these “discoveries” of things, which I believed to be driven by magic, but which can actually be driven only by me, do feel obvious. At the same time I’m pretty sure I will have a lot more of them in future. None of them is too difficult to predict now – almost everything that I might rely on will one day require some payment from me and stop working silently the way I am used to. However, like with shining shoes, testing my code and marketing my apps, I will definitely be very surprised by each and every thing that didn’t seem to need any help to get done but suddenly starts to do so when I get a little bit older.

понедельник, 6 января 2014 г.

EOL: 2013

It is the beginning of January now, which means that it’s time to look back and see what has been done and what I failed to do over the last 12 months. As with any year in our life, during the last one I witnessed the appearance of new things and the start of new activities – many of them I will carry through 2014 and maybe even further. On the other side, there are things that I had to leave in 2013 either because I have chosen to do so or due to the reasons less dependent on my short term decisions and determined mostly by the nature of the events. Both what I left and what I take with me will influence my future life and is important when looking ahead.

понедельник, 9 сентября 2013 г.

Road to Chaos

A few of my recent posts are devoted to various chaotic systems, in which I must have pointed out that my exploration of Chaos Theory in its simplest forms started quite long ago. Now it is a lot of joy for me to remember how these beautiful things gradually came into my life to make up a small but important share of what I learn and do. It turns out that it was a sequence of loosely, if at all, connected events that led me to programming ferns and double loops, most of which were characterized by total absence of any link to science.

вторник, 30 июля 2013 г.

Regularities


Recently I came across an advice on blogging by John Sonmez – he recommends those willing to maintain a personal blog to post there regularly – best of all, according to a strict schedule. As a mature blogger and, at the same time, an athlete, he definitely knows what he’s talking about. On the other hand, in the last post I mentioned that employment made my life more ‘scheduled’ in a way that seems positive to me. This makes me search for some reason making regularities desired for us and helpful in achieving our goals.

First, it is easy to note that the things we do regularly determine what we are in the eyes of others. For instance, you are considered a software developer if you devote several days a week to software engineering activities. The same way, one is called an alcoholic if and only if they drink a lot of spirits and do that on a daily basis (more or less). However, obviously, John didn’t mean this simple fact – i.e. if you post every day, you are a blogger, period – advising to blog regularly. Similarly, I like the fact that now I work from 11 a.m. till 8 p.m. on average not merely because doing so allows me to deem myself a proper citizen, but because this gives me finer control over my life, and that is what makes following certain patterns in a constant and consistent manner so important.

Actually, regular behavior is what allows for fine control. The nature of this idea can be seen clearly when one views it the way control theorists and machine learners do. For those who build automated systems control is all about minimizing error – the difference between the observed and the desired behavior. What makes the engineering approach so valuable is that it begins with acknowledging the possibility – or, better, inevitability – of errors. The idea to do so is as obvious as different from what people (including me) usually do – when deciding to start something new we tend to believe that we’ll succeed easily and quickly, and the sun will shine. While the latter assumption is certainly true, there is a problem with the former – we do fail.

Let’s follow the engineer’s path: say we prepared ourselves for failing and are ready to go – what does it have to do with regularities? The trick is that to succeed one needs to fail a lot and to do that on a regular basis, thus opening the doors to controlling things. Achieving one’s goals is made possible by the flow of information generated by doing something regularly. Only if you continuously get this information it can help you move closer to your goals. Not only setting up a schedule of blog posts allows one to know instantly when they fail and to react as soon as possible – it permits looking back and understanding the nature of one’s mistakes, making it possible to perform better in future. Furthermore, one shouldn’t forget that we, humans, are in fact sophisticated control systems and behave, to some extent, in the same error-minimizing fashion. When we deviate from a well-established behavior pattern, we tend to return to it unconsciously. That is, we develop habits and this is another reason to evenly divide the way to your targets into carefully defined steps.

Having said this, I can easily explain why getting employed feels so positive to me even if I don’t take into consideration the obvious benefits of a challenging and well-paid job. Surprisingly, the great part is that the job takes a great deal of my time and does that in a regular manner. Combined with the time spent on commuting, having breakfast and lunch, plus some other ‘transactional expenses’, this leaves me with approximately 3 to 4 hours each working day to do some cool and valuable stuff not related to work. Knowing this figure and realizing that it won’t change, I am free from illusions of having a lot of time to tackle everything I want. Even more, whenever (quite often) I fail to spend this free time on something worthy I know precisely how much I lose. With this same principle applying to other resources – say, money – as well, I now have a lot of information to be more manageable.

Keeping all this stuff in my head, I do not search to eliminate any uncertainties and 'free will' completely, since that is both impossible and boring. Still, I believe that in case I want to succeed in something, I should work toward my aims regularly – with close to constant pace and in carefully allocated timeframes. This is almost as important as knowing precisely where I want to arrive.
 

суббота, 13 июля 2013 г.

The Candidate's Wishlist: Wrecked

After defending the diploma in the end of June I have finally got employed this week. I already feel how the job changes my life and get first benefits from it, but what is more interesting right now is the rapid mutation of my views on working as a programmer.
It is easy to track these changes because before engaging into a series of job interviews back in the last month I made up the so-called candidate’s wishlist – a set of about ten points, which I deemed important in the context of choosing a company to work for. What makes me speak of it here is the fact that some of the items are not fulfilled, though this makes me even happier with the new job.
One thing that I desired is a comfortable office. When composing my wishlist I tried to imagine the place where I would like to develop software: it had an A/C, a coffee maker and a teapot as well as other stuff of this kind – we have all of this. The workplaces with decent computers in my ideal office were distributed across several medium-sized rooms hosting three to five people each. That’s precisely where I failed: we have an open-space. I heard a lot of bad words about open-space and feared it a bit, but now I thank God for getting into this one. Although it makes the boundaries of my private zone elusive – almost non-existent – it is at the same time very friendly and welcoming. Being able to constantly see the colleagues around me working, engaging into passionate conversations regarding our progress and simply striding to and fro somehow motivates and, instead of distracting, helps to concentrate on doing my own job. After a couple of days there I truly believe that the way our office is organized plays a major role in making me a part of my new team – that’s something that, surprisingly, I have never heard about open-space.
On the other side, mere floor and walls – or their absence – can’t do much to improve and make easier one’s interaction with colleagues – that’s the people who make the difference. Upon coming to the office last Monday I found about three dozen interesting and kind men and women there, who are indeed willing to help me to get accustomed to the new job and environment. It turned out that not only my teamleader is concerned about my progress, but also other seniors do pay attention to what I do and, even though I am mostly learning new stuff now, they make me feel that I contribute a little to the progress of the whole company.
Beside the requirements to the office and the presence of experienced developers my wishlist included the desired size of the team – I thought that it should lie somewhere between five and eight people. The company failed this expectation as well – I am actually going to become the third guy working on a project and we don’t expect any more newcomers. At the same time, after the week on job I feel I can’t easily draw a line between our team and the others – we depend too strongly on those who do other pieces of work and they do depend on us to some extent. Due to this fact combined with the close to absolute availability of every colleague provided be the open-space I could say that the size of my team is about 30 developers, QAs and support engineers. This leads me to an interesting idea: the tradeoff between a small team and a large one is actually a tradeoff between the availability of many experienced colleagues to learn from and the ability to focus on a particular piece of work – software in my case – and the corresponding features and customers. It seems to me that the configuration with a very small team nested in a larger one and strongly connected with the latter’s other parts provides me both kinds of benefit. I know there are no silver bullets and free lunches and I might face some drawbacks in future, although I believe I am really lucky to have things laid out this way. Moreover, now I am not sure if organizing the development of the system of our kind is actually possible in some other fashion.
 
In addition to wrecking my wishlist this way, the job also affects my life outside the office significantly. I always stated that a full-time position is not only a source of income – it is a way to spend less as well. Now, as my spending halved, I have an actual proof of this hypothesis. Moreover, the positive outcomes of my employment are not limited just to the improved trade balance – I also smoke less and even procrastinate much less. On the other side, being obliged to work every day except weekends I can’t devote as much time to, say, this blog and my pet-projects as I used to. However, the lack of free time makes me manage it carefully to be able to do more. Combined with the fact that the job allows me to do something important for the company and its customers that’s a fair compensation. Finally, the ease with which I wake up these days confirms that I am pretty satisfied with my new employer and the regularities, which employment brought into my life.

понедельник, 28 января 2013 г.

Software Bucket

I have recently come across a short blog post devoted to having a personal list of software pieces, that one wants to develop - a software bucket. Of course it was interesting for me to think over the possible contents of my own bucket. The first lines of my list are occupied by the things I am currently working on. The topmost is definitely a simple tool for arranging personal tasks. I know that there are plenty of such applications, nevertheless I have decided to create one more - mainly because I want a tool, which is as convenient for me as possible, and hope that someone else might also find it useful.
 
I have originally come to the idea of creating such an application almost a year ago, but it was only in the end of October when I have finally made up a deadline for the first version of the tool. Being fascinated by the new Windows 8 OS I have chosen to deliver my app through the Windows Store. The key advantage of this approach is that it will provide me with both the means of distributing my creation and the feedback channel - in case someone downloads the application. Beside that, Windows Store applications development feels quite suitable for me because I have got reasonable experience with .NET development and, particularly, with Windows Presentation Foundation.
 
Despite having done a significant share of work, I have missed the initial deadline, but feeling ashamed for this I have already set up the new one. I feel determined not break one more promise given to myself. After delivering the first version, on which I am working now, I plan to continue expanding this project and add some more features to help me and  potential users plan activities in even more effective manner. I will struggle to avoid making the app overloaded with details and inconvenient, so that other Windows 8 users will be able to consider it helpful and easy to use.
 
Another thing in the bucket is my current job project - I am developing a little toolset for generating manufacturing-related reports from the data provided by a complex PDM-system. Although the task may seem not very interesting, I feel quite absorbed with it, because it offers me a great chance to practice TDD and refactoring techniques to build and deliver an efficient and reliable piece of software, which is capable of giving valuable help to our customers. Additionally, I believe that the need to continuously align the thing to fresh portions of requirements will build me up towards multiple challenges that I will face in future.
 
On the other side, I was stupid enough not to test drive the application from the first steps, so it developed in a way which is far from perfect. However, I feel surprisingly glad about that, because for me this is an opportunity to feel all the pain caused by my own code and design decisions - now I am refactoring the project and supporting it with automated tests. Lots of interesting details of this piece of software and decisions made while working on it, as well as the desire to clean and develop it further, make it an important part of my software bucket.
 
One more item on the list, which is easy to come by, is my diploma project. This one is going to be a data analysis tool for monitoring students' progress data in my university and making predictions based upon it. I am not sure whether there is a substantial chance for it to be adopted and used by the university staff, nevertheless it provides me with important experience and offers a lot of interesting opportunities. First of all, I would like to explore existing data analysis tools and techniques and to adopt some of these to real data. Besides, while working on the project I have to use an external system, which is aggregating and providing the data consumed by my application. The fact that I have been working with it for a considerable period has taught me to put significant effort into shielding my own creations from the fluctuations in the consumed systems' behavior - positively, that's an important lesson. In this sense this looks a bit like my job project, where my tools retrieve data from an external system. My diploma and job feel even more similar because both have something to do with reporting activities, although the projects focus on different problems. The key aspect of the former is data analysis, while the latter revolves around providing flexible data retrieving and processing tools to bridge the gap between the PDM-system, that our customers use, and the reporting engines. My work on the diploma project, as I see it, will involve facing multiple software development problems, learning new techniques and, hopefully, obtaining valuable results - the project is worth the effort.
 
The rest of my software bucket looks much less clear. Being fascinated by the world of software development and its numerous applications, I cant say where exactly I want to direct my work. Moreover, I love the process of designing, writing and testing programs so much, that it is very easy for me to build things merely for the sake of building things. I feel that's a problem and I have to fight this passion sometimes, because it prevents me from focusing on the issues that are truly important, and not only is it harmful to me, but it can also become a source of pain for my employers and customers. On the other hand, this same passion for software allows me to make out a couple of things, which are attracting me as a young developer.
 
Among these things one can find code analysis tools. I have come across multiple mentions of such software recently and it so happened, that the idea to contribute to some open-source project to taste the idea of open-source myself has come to me almost at the same time. That's why I plan to search for a project in Clojure, which will allow me to practice understanding others' code and design, to make contributions to a system that may feel alien to me and to better understand functional programming and Clojure itself. I don't really limit the search to code analysis projects only - I acknowledge these may be absent - but I feel eager to work on a project of this particular kind, as this may help both in understanding the ideas behind code analysis and writing better programs.
 
All the items listed above are united by the concept of tool - they are designed to assist users with their work and provide them with some solutions to the problems, which they face in some area of their life. At the same time any tool is marked by the lack of autonomy and relies heavily on the signals from its consumer. No hammer drives a nail into wall itself - it always needs a person who will pound it on the nail. Definitely, that's not the only way software can function, and I really wish to participate in building an entity, that is capable of analyzing situation on it's own, making sensible decisions and acting correspondingly. I cant say that I am fully determined to work on, say, self-driving car, but I suppose that the area of autonomous (and autonomously developing) systems - either robotics or less physical applications of AI - may turn out quite suitable for me. Anyway, it won't be easy for me to reject an opportunity in the field.
 
The key aspect of such a 'self-driving' system is the ability to function in a self-directed manner without a flow of instructions from human operator, who serves as a link between the thing and the world around it. The idea that 'reality' of this world may be varied - in the sense that the world of the thing need not be the same as the world where I write these paragraphs - combined with my affection for video games leads to another piece in my software bucket: creating an AI for a video game is a challenging task. While I can hardly imagine earning my living in the game development industry, I could sooner or later participate in some open-source game project. Although the game development field may seem not serious, I still think that it can sometimes serve as a source of inspiration and insight for other, more serious areas. Furthermore, my minor attempts to create some simplistic computer games showed me that this kind of work is highly paying in emotional sense, because it is always amazing to play with your own creations.
 
So these projects and ideas constitute my software bucket today, although due to the reasons mentioned above the growth and expansion of the list are barely constrained. This said, I will have to practice saying 'no' a lot in the near future to avoid getting torn apart by my own curiosity and desire to build things. Still, I hope that willingness to say 'yes' will guide me towards doing what I can do best and therefore must do.

среда, 2 января 2013 г.

Courage

Recently (well, that is several months ago), I have changed the name of this blog from meaningless 'Not that important notes' to something that seems at worst equally meaningless, but probably less irrelevant. To make sense of it I should explain what I feel courage is.
 
First of all, there is the common meaning of the word 'courage' which deals with being not prone to fear. Because I am very diffident person it is sometimes quite difficult for me to share notes with other people - especially when it comes to the things written in English, since I know that my language skills are far from excellency. This way it turns out that while posting something to the blog - including this particular entry - I am in fact exercising my courage. The quality of being open to others and not afraid of sharing my thoughts and ideas is of great importance. I believe that the blog helps me foster this trait, so the new title apparently makes some sense.
 
 
 
On the other hand, writing itself allows me to better understand different aspects of the things I deal with in any area of my life as well as the ways I am dealing with them, thus directly or indirectly improving my decision making skills. This reminds me of the definition given by a samurai in Hagakure:
 
To rush in to the thick of battle and to be slain in it is easy enough, and the merest churl is equal to the task, but it is true courage to live when it is right to live, and to die only when it is right to die.
 
Although Hagakure is a book for warriors written by a warrior, the quote suggests that courage is not about being able to get into battle without any hesitation or fear. Instead it states that courage is more of an ability to know what to do next. Such a quality is as important for warriors as it is for software developers and for everybody else. Beside this, it is required and at the same time hard to master for me as a young man, because being a man, as opposed to a child, has a lot to do with making my own decisions and dealing with their consequences. Thus, as the blog is used to communicate ideas - and its title is not an exception of any kind - I am communicating an idea: courage is very important both for me and you.
 
One more quote encourages me to value courage so high:
 
Courage is a litmus paper for all other human qualities.
 
I am not sure where does this definition originate from and don't even remember who is its author. However, what I feel sure about is the fact that this blog may serve as a good test or indicator for all my personal traits.

пятница, 20 июля 2012 г.

Learning to Program

About a year ago I took part in a vivid discussion of the best choice of the first programming language to study. The discussion didn't lead to any consensus thus making me think a lot about the question itself as well as remember the path along which I moved through the land of the programming craft.

пятница, 13 апреля 2012 г.

The Two Sources Rule

The notion that in modern world the amount of books and another written sources of information is overwhelming is not fresh at all. It was introduced several decades ago and has been becoming increasingly actual from then on. The invention of the Internet eased the problem in the way that it made the process of finding and getting books and papers that suit one's needs less painful. From the other side it left unsolved the problem of choosing a particular book. In fact, the issue became even more complicated given the fact that nowadays almost everyone can write a piece and publish it in the web. This leads to an increasing amount of written materials, but the good papers vs. bad papers ratio is likely to stay the same (in the best case, I mean). I suppose that frequently one's choice of reading is based on other people's recommendations (at least mine is) and this idea raises the following question:
How do we know who's recommendations should we trust?

Not so long ago I've explored a sort of rule that seems to guide my choice of reading . This rule simply states that I tend to read the books which were recommended to me at least twice, by two different people. The recommendation here doesn't mean that someone directly advices me - it may be a mention in another book I am reading, citation in an article or a review in a blog. (By the way, I've just said that most of the books I read I find through reading.)

It is important to note that I don't mean to say I had somehow developed and formulated the law and had been deliberately following it from then on - no, the thing has developed without a minimal effort from my side and I've only noticed that generally I do unintentionally follow it. 

Another interesting detail here is how I prioritize the sources of such recommendations - that is who's advice do I trust more. Plain logic suggests I should pay more attention to the advice given by the people I know well and vice versa. Surprisingly, it turns out that I tend to consider the recommendations by people I don't know personally more valuable and trustworhy than those coming from my friends or family. Such recommendations often appear from blogs by different programming and CS-related people (that's obviously because most blogs I read are mainteinde by people of this kind) - for example, recently I started reading "Godel, Escher, Bach. An Eternal Golden Braid" by Douglas R. Hofstadter and for that I should thank Professor Eugene Wallingford who has mentioned the book in his blog.


One more non-perfect example supporting the idea is related to the "Seven Habits of Highly Effective People" by Stephen R. Covey. My father had adviced me to read the book when I was about 15 years old. I did read it, but several years later - when I was 19. The thing that made me open the "Seven Habits" was a blog entry mentioning it by an individual whom I admired but never knew personally. I say that the example is not perfect because it fits precisely to the title idea of the entry - the book was recommended by two distinct persons and that may have made me start reading it. At the same time, the question of how I prioritize recommendations depending on their sources has first occupied me exactly in context of the advice that led me to reading the "Seven Habits" book.


Sincerely speaking, I can't find any good reason justifying such a strange priorities. The only idea I have about these is that most blogs and papers from which I get information on books are somehow connected to the fields of my interest whereas my father has nothing to do with, say, Computer Science or programming. This may be the point why I pay more attention to the recommendations from the blogs than those from my relatives - the former are just closer related to the stuff I am interested in. Still, this belief of me paying less attenton to my relatives' tips may prove to be false - especially considering the fact that I have read several books on economics that my father encouraged me to read - but, in case I'm not mistaken about the existence of such a rule, there must be some better explanation for such a strange prioritizing - an argument I can't formulate right now.

понедельник, 29 августа 2011 г.

Rough Me

Today I received confirmation of a good friend's of mine breakup with his girlfriend that had occured several weeks ago. I say "confirmation" because I was almost sure about that event due to more or less subtle signs, but wasn't told of it until today.

The story behind this breakup is rather long and unusual for me, though it's not the story or simple fact that bothers me. I faced somehow similar problem several years ago myself and remember the situation and my behavior well. Now I see that my friend has intentionally or not chosen the same attitude I had. So having some experience I'm pretty sure that the attitude is foolish and ineffective. I remember shaking myself and jumping out of that attitude after several weeks and it's obvious that my friend will also leave it, but I'm also confident that such an attitude isn't necessery or inevitable at all so I would like to see him leaving it right now. Unfortunately it doesn't seem to happen that soon.

I acknowledge that the situation is really difficult and sad for my friend and I'd better encourage him, provide some support and maybe pay a little extra attention, but I'm not that good about all these things. Moreover I'm sure that this crash is fortunate for him due to lots of different circumstances.
Thus I've just written down these simple thougths of mine and shared some extract with my friend.

воскресенье, 12 июля 2009 г.

About

I am sixth year student at CAD/CAM/PLM department of Bauman Moscow State Technical University (in Moscow, Russia) and now I'm working on my diploma, which is devoted to data analysis. I used to work part time as a junior software engineer developing a reporting application for a large PLM system, although I left job in March due to the need to work on diploma. I am interested in Artificial Intelligence and Machine Learning subjects and spend some spare time studying different articles devoted to these fields and, sometimes, trying to implement the techniques described there. Most of my activities involve programming - I love it and do a lot of it. I write programs mainly in C# (diploma and some pet projects), C++ (some university-related stuff) and Python (other student stuff, AI/ML tools study, etc.) Besides, I developed a project in Java and several minor applications in C++ for my employer.
 

1. Programmer

I feel quite comfortable calling myself a programmer. I had started writing programs during my first year in university (back in 2006), although the idea to become a programmer conquered me only 2-3 years later - mainly to give way to the idea to be a programmer. The first three languages which I studied were the C-ones going in quite a logical order - from C to C++ and then to C#. However it is safe to say that I got any reasonable understanding of C++ only while working on some tasks in C# - I feel that the way in which my experience with the latter differed from writing programs in C++ and C helped me to develop better understanding of the Bjarne Stroustroup's creation as well as of object-oriented programming in general. These three languages were my only company in 2010 and 2011 - that is during my fourth year of study - the only intruder was SQL which I faced in the way of Relational Databases course. Considering SQL, I had more experience with it while dealing with a study project, which involved using database (MS SQL Server was chosen as a DBMS), accessing web-services (mostly SOAP and some REST) and pushing data here and there. Not surprisingly, I did the project on the .NET platform in C#. Speaking of Microsoft, I should also mention that I've taken several courses devoted to building .NET applications offered by the company - I will return to this later.

As for other programming languages which I have tried, in August 2011 I made my first steps in Python and this amazing language gradually became my 'everyday language' - now I use it for most university assignments and for numerous other tasks. Moreover, I often use the language to make first steps in a task even if I know that it will eventually be done in another language - Python's simplicity and readability lets me quickly outline the main ideas behind the problem in question and it's future solution. I have never used Matlab, except for doing Andrew Ng's Machine Learning online class assignments in Octave which is quite similar, so I do the tasks that involve some simple math in Python as well.

There is one more language among those which I've tried - Clojure. Being a functional language it differs considerably from all the languages which I have mentioned above. One of the reasons behind exploring Clojure was the mere fact that the functional programming paradigm is very popular nowadays, which made me eager to try something functional. As for choosing this particular language from the multitude of functional ones, that was almost random choice - I just came across some article or an essay mentioning Clojure and downloaded it. Several short but painful detours into the immutability, recursion and parenthesis territory were enough for me to fall in love with the language, although I haven't accomplished any serious task in it yet. "I'm Winston Wolfe. I solve problems." One thing I have tried to use Clojure for was downloading multipaged html from the web and merging these pages into a single document after some simple preprocessing - being a childish task this still helped me to get accustomed with Clojure's syntax and some basic features.
Besides the languages, when speaking of being a programmer I should also mention that I have some experience with the ideas of TDD and testing frameworks, including NMock for .NET, JUnit and JMock for Java and gtest for C++. Sincerely speaking, I'm not a true follower of TDD, although I do try to stick to its principles and to support the pieces of software, which I create, with automated test suites. Another tool which I almost always use is Mercurial revision control system.

One more thing to mention is that I programmed a lot in Java - the main counterpart of .NET with C# and the basement of Clojure at the same time - this one I used in my job.
 

2. Employee

I worked  part-time as a junior software engineer for almost a year. I cancelled job to devote my efforts to diploma this March. Before that my work involved mainly developing an application for pairing a PDM system with one of open source reporting engines - as you may have guessed the application was being written in Java. Another thing that I did for the same employer was creating a couple of simple applications in C++ for CAD/CAM system from the same vendor. The company I worked for is quite large, but hardly known anywhere except Russia. As for my department, it serves as a supplier and maintainer of different PLM systems (mainly CAD and PDM) for many Russian customers and develops some extensions to these systems as well. I can't say that the tasks, that I dealt with, involved any really hard problems, still these were complex enough to be interesting for me.

3. Student

As for my educational background, now I'm experiencing the 6th (and last) year of study at CAD/CAM/PLM department (department's page - in Russian only) of Bauman Moscow State Technical University. The five preceding years of study allowed me to get some knowledge of basic engineering subjects as well as provided more or less deep insights into the matters of CAD systems. Besides that, my curriculum included multiple CS subjects.

My diploma project is devoted to data analysis - I am going to do my best at exploiting the study progress data accumulated in our university to make up a piece of software capable of producing some reasonable predictions. In fact, now it is quite difficult to say how far I will go this way and where I will end up, but my project will definitely involve using machine learning techniques as well as building an OLAP cube. Additionally, I will consider providing reporting facilities by means of some reporting engine - at least, it correlates with my recent job. One may be surprised by the fact that the subject of my diploma diverts significantly from my department's field and yes, it does, although I could argue that CAD and, broadly, PLM systems involve lots of data analysis.

Speaking of study, I also make some efforts to enhance my university education. First of all, I try to take advantage of the numerous courses available online - mainly through Udacity and Coursera platforms. Namely, I have attained Machine Learning course by Andrew Ng, CS373 course taught by Sebastian Thrun, ST101 by the same teacher, John Regehr's and Sean Bennett's CS258 course on software testing and Peter Norvig's great CS212. Additionally, I am now taking the CS255 HTML5 game development mainly to get an introduction to HTML5 and Javascript and  Model Thinking course by Scott Page, which is not related to software engineering, but seems educating and mind-broadening.

On the other hand, I try to benefit from the availability of numerous vendor courses of which most suitable for me are those offered by Microsoft. I have attained M10262, M10263 and M10265 courses which are devoted to WPF, WCF and data access facilities included into .NET platform, respectively. As for corresponding exams, I have past one that deals with WPF and a general C# programming exam. I am also looking forward to take the WCF and data access solutions exams as soon as I will get more vivid experience with these tools.

4. Interested

Another subject to mention here are my interests. It is clearly seen from the paragraphs above that I am fond of programming and software development. I can't say that I perform amazingly in either of these fields, but I do enjoy both and try to do a lot of development and even more programming. At least, I feel that now I am much better developer than I used to be, say, a year ago - and this feeling of progress persists for some time already. In this context, a career of software engineer looks appealing to me, though the question of what to specialize on remains in place.

One more field, closely connected to software engineering, attracts me - that is Artificial Intelligence. Here I am much worse than in programming. My only detours to this territory were multiple attempts to code different artificial neural networks and some experience with Prolog during an Intro to AI course at the university. I have also received some more insights from Sebastian Thrun's 'Programming a Robotic Car' and Andrew Ng's 'Machine Learning' courses, which I have mentioned above. The key sources of motivation to explore AI for me were books, notably 'Godel, Escher, Bach' by Douglas Hofstadter and numerous works by Stanislaw Lem (Golem XIV and Summa Technologiae could be highlighted). Besides that, the Hyperion saga by Dan Simmons must have also played an important role here. Speaking of actual steps taken in this direction, I haven't invented anything reasonable yet and have only studied some articles devoted to the subject. Because I am fascinated by the notion of artificial neural networks, these were the subject of most of papers. I still plan to continue investigating the field and have some ideas to implement. However, I am not sure whether I will stick to the ANN field in case I do any serious research in AI - so, similarly to my developer-side, no choice has been made here yet.

Feel free to contact me -  via comments, or twitter.