Wednesday, September 29, 2010

7 Life lessons from a self-taught programmer

I always had a thing with languages. For some reason, I always found it easy to learn them, and had a great time using them. Surprisingly enough, I followed a tech high-school, majoring with a diploma as a programmer in… FORTRAN. After that, I went to the University of Letters in Bucharest, where I studied Romanian and French literature. And in the last 10 years I had my own online publishing company, where I wrote more than 70% of the source code for the underlying software platform.

Why I’m telling you all this? Not to show you that my career life was a roller-coaster, if you read my blog for some time you already know that. But because there’s a link between spoken languages and programming languages. At a certain level, they’re both a vocabulary over a grammar. A programming language can be learned and applied just like learning French or Japanese.

Reality Is Created With Words

If you ever learned a foreign language you remember that special feeling of expansion, both inward and outward. It’s like space is growing around you. And that’s because every time you learn to describe the world in a new language, you actually redefine it, you reinvent it and enjoy it as a completely new reality. L’amour en Francais it’s a completely different thing from love in English, or from dragoste in Romanian. They’re actually new realities. Learning a new language is a beautiful travel.

Now, a programming language is almost the same. It enlarges your mind and gives you access to areas in your life that you didn’t even know they exist. It puts you in uncomfortable situations and forces you to solve complicated problems. Every new app that you start coding is like a trip to Thailand with only a pocket Thai dictionary. When you start the app, you barely know how to say sawasdee, but at the end of it, not only you know how to have a conversation with the locals, but nobody will be able to tell that you have an accent.

7 Life Lessons From A Self-Taught Programmer

I recently finished a very dear project to me, an iPhone / iPad app based on my own life management framework, Assess – Decide – Do. The app is available on the App Store, by the way, and it’s only 3.99. It took me 30 days to put together the first version, but around 90 days in total to have a solid, mature and feature packed app. During this trip, I had an incredible time, learned tremendously and thoroughly enjoyed every breakthrough. What follows is a collection of life lessons learned as a self-taught programmers, mainly while I was coding iAdd.

1. Bugs Are On You

Always. Don’t blame the compiler, the lack of documentation, or the horoscope. You made a mistake somewhere. At some point, something happened in one of your Assess – Decide – Do cycles (yes, you have those cycles even if you’re not aware of them) and you screwed something. I spent countless hours trying to find a flaw in some class or API, basically banging my head against the wall by not accepting that I was the source of that mistake. A typo, a bad copy/paste, or whatever: every bug was in fact my own responsibility.

It’s the same thing in life. If there’s something wrong, check your own history. Don’t blame somebody else. It’s not the universal compiler’s fault (if there would be such a thing like a Universal Compiler, anyway). There’s no glitch in the Matrix. There’s no failure in the Universe. It’s in you. Look in the mirror and try to find out what you did wrong. And then solve it.

2. You Have To Face The Problem, Detours Are Not An Option

Even if you don’t like it, in programming you have to take the most “difficult” path simply because there are no other options. Workarounds are fragile. They may solve the problem for the time being but their fragility will show up the moment you’d want to expand your app. Do it the right way, fix the problem for good. Or, if you settle for workarounds, expect things to blow in your face the moment you’re expecting this the least.

It’s like in life: you can’t live in a continuous status-quo. You gotta take responsibility for your choices, climb the mountain you have to climb, because the solution is always on top of that mountain. You can’t take a detour. Or if you choose a detour instead of facing the problem upfront, you may overcome some temporary difficulties, but you won’t find the real answer. The real answer is always on top of the mountain.

3. Today’s Problem Is Tomorrow’s Laughter

If you learn constantly, what seems difficult now, tomorrow will seem like a joke. Not only once I hit “impossible” situations in my coding, but staying with them long enough made them fade away. I remember the feeling of frustration and powerlessness every time I had to learn something new. Every time some new class showed up, some new algorithms appeared and I felt like I will never finish. But I did. And I laughed at my own frustration afterwards.

If you really take the time to look back at your life, you’d be amazed how far you’ve already gone. Just try to remember how was your life 5 years ago. How much was changed in your financial life? In your personal life? In your career? If you did your homework well, as in the number two above, the answer will amaze you. But if your answer will fill you up with sadness and frustration, go back to number two above and climb your mountain.

4. Good Focus Builds Good Things

The temptation of having something running out as fast you can, publishing it on the AppStore and waiting for the cash to pour in is big. Tens of thousands of programmers are hitting this road just like the gold rush in Wild Wild West. But if you look at the top 10 apps they’re all solid, verified, tested and really polished apps. Hurrying up is not a good solution. Especially in a highly competitive ecosystem like the App Store.

They say “all good things come to those who wait” for a reason, you know? You can’t expect to go on with quick fixes for ever. And yet, the perspective of waiting will frighten you up. So bad, that you’ll just run with something that works for the moment and lose sight of the big picture. Doing things incessantly, just for the sake of coping with your day to day challenges won’t take you far. Take some time to think things over.

5. If You Feel It, Do It

Many times you won’t have the tools to query your user base about the features they’d want in your app. You’re either an indie developer (like me), or the company doesn’t have a budget for creating focus groups or there’s nobody watching the forums, etc. Fact is you’ll have to rely most of the time on your own intuition when it comes to adding or eliminating features from your app. So, if you feel like something new will fit in, just go for it.

Of course, there will be times when you’ll be hit by the “feature diarrhea” but that’s a risk you’ll have to take. In time, you’ll develop a fine sense of what’s appropriate and what’s not. And you’ll grow that sense by practice, by direct interaction, by doing stuff.

That’s exactly with life decisions. When you feel it, go for it. Don’t delay, don’t ask for permission. You know better.

6. Be Neat

If you ever wrote a project with more than 5 source code files, you know that managing those source code files can be a nightmare. At this point, iAdd has almost 200 source code files. It would have been impossible to manage them without being organized and neat. By the way, iAdd was developed from the idea stage to the final implementation stage using Assess – Decide – Do, my life management framework. Without a formalized methodology in place, the project simply wouldn’t have been finished. Never.

If you have unfinished things, unspoken sentences or forgotten promises, uncover, speak out or fulfill. Don’t leave things floating around, hoping that someone else will come over and take care of them for you. Nobody will. It’s only you and your life. Keep it in order. Even if you did a mistake, a neat mistake is far easier to be repaired than a complicated one.

7. There’s More Than One Way To Skin A Cat

And perhaps more than 10 ways to implement an algorithm. In my early days as a programmer, I always was afraid there isn’t any way to do it. Now I’m afraid that I won’t choose the right way to do it. You always have more choices than you think you have. The same algorithm can be implemented in dozens of ways and a problem can be solved in thousands of ways.

That’s the same in life. If in the beginning you’ll be afraid that you won’t reach your goal, as you advance and learn, you’ll be afraid that you didn’t chose the most simple and effective way to do it. The subtle lesson here is that there are always solutions. Abundant, flowing and ready to be used. Embracing risks and daring to be different will teach you that nothing is impossible.

Nothing.

Source: dragosroua.com

Friday, September 24, 2010

Điều gì đó



Wednesday, September 22, 2010

Trong những ngày trôi

cứ vô tình ngụp lặn

trong nỗi buồn thẳm sâu

tim bắt đầu ngơ ngác

em đâu rồi? em đâu?

cơn mơ khô và khát

uống nhớ vào đâm say

mỗi ngày hư vô lại

sáng tác ra một ngày

chiếc xác ve vừa thoát

còn đọng hờ thân cây

chớm chạm đà vỡ nát

em đâu rồi? thơ ngây?

Nguyễn Thế Hoàng Linh

Monday, September 20, 2010

Tờ giấy bạc 500 đồng

Ông cho một tờ bạc năm trăm mới cứng. Chú bé lôi ra lôi vào, ngắm nghía nó hoài. Ít hôm sau chú đem tiền mua mấy viên bi. Cô bán hàng nhận được tờ bạc đẹp, tỉ mỉ ghép xếp nó với mấy tờ bạc mới tặng một người bạn cùng lớp. Một ngày anh chàng tặng niềm hi vọng nhỏ nhỏ đó cho một người ăn mày tật nguyền.

Người ăn mày gỡ ngôi sao ra, nhập tờ bạc với những đồng tiền cũ bẩn khác. Đối với ông ta điều quan trọng lúc đó là phải có đủ tiền để mua thuốc chữa cảm. Tờ bạc nằm trong tiệm thuốc tây dưới bàn tay sạch sẽ của anh dược sĩ trẻ vài ngày. Rồi nó được dùng trả tiền thừa cho một người phụ nữ trung niên.Người phụ nữ khia ra đường, bất ngờ bị giật giỏ. Tất cả tiền trong giỏ chỉ đủ cho tên cướp mua ma túy thỏa mãn cơn vật vã.

Tờ bạc bắt đầu rách dần, rách vài lỗ nhỏ. Nó trải bao vui buồn, qua tay bao người: chị hàng cá, người quét rác...Có lần có còn thấm cả máu của một người lượm ve chai do chị cào phải mảnh thủy tinh. Rồi tờ bạc đến tay chị bán chè. Chị dùng nó thối lại cho cô bé ăn quà xinh xắn có nước da trắng trẻo. Khi về đến nhà, mẹ cô bé nhìn thấy tờ tiền đen đủi, cáu xỉn. Chị ta hét lên giận dữ, nói rằng tiền này đầy rẫy vi trùng. Chị giật lấy tờ bạc trên tay cô bé vô tình làm nó rách đôi và vứt xuống đường.

Gió thổi một nửa tờ bạc bay đến gốc cây, nửa kia bay xuống cuống. Sáng hôm sau, có cụ già đi ngang, nhặt lấy nửa tờ tiền ướt đẫm sương, đem về nhà. bà cho nó kết hôn với nửa tờ tiền khác bằng miếng băng keo trong.Khi cụ già đi lĩnh lương hưu, xe đạp bị xẹp bánh. Bà lấy tiền trả công cho anh chàng bơm xe. Anh chàng trông còn trẻ lắm, độ 15,16 tuổi là cùng.

Tối đó, đồng tiền với đủ mùi thơm, thối, hôi, tanh, chua, cay cùng bao nhiêu vi khuẩn bám trên mình còn thấm đẫm vị mặn của nước mắt cậu con trai mới lớn. Bây giờ tờ bạc cũ mèm đang nằm ngủ ngon lành trong tấm giấy học trò ghi nguệch ngoạc:" Giữ mãi! Đây là số tiền đầu tiên mình kiếm được."

Tác giả: Me Sao

Friday, September 17, 2010

Như chờ tình đến rồi hãy yêu


Sáng nay tôi nhìn thấy em ở ngã tư. Đèn đỏ còn sáng và đồng hồ đang đếm ngược. Ba mươi chín giây. Em đang vội, chiếc xe đạp điện màu đỏ cứ nhích dần lên. Không chỉ mình em, nhiều người khác cũng vội. Những chiếc xe máy cứ nhích dần, nhích dần lên…Sống là không chờ đợi. Dù chỉ mấy mươi giây.

Tôi nhớ có một hôm nào đó, em đã nói với tôi rằng đấy là một triết lý hay, ta phải tranh thủ sống đến từng giây của cuộc đời.

Nhưng em biết không, đừng vì bất cứ một triết lý hay nào mà gạt bỏ đi ý nghĩa của sự chờ đợi. Bởi chờ đợi ở đây không phải là há miệng chờ sung, mà chờ đợi là một phần của bài học cuộc đời. Em sẽ bằng lòng đợi chứ, nếu em đã học biết về điều sẽ xảy ra?

Đợi khi xếp hàng ở siêu thị, vì biết rồi sẽ đến lượt mình và rằng đó là sự công bằng. Đợi tín hiệu đèn xanh trước khi nhấn bàn đạp, vì biết đó là luật pháp và sự an toàn cho chính bản thân. Đợi một người trễ hẹn thêm dăm phút nữa, vì biết có bao nhiêu việc có thể bất ngờ xảy ra trên đường. Đợi một cơn mưa vì biết rằng dù dai dẳng mấy, nó cũng phải tạnh. Đợi một tình yêu đích thực vì biết rằng những thứ tình yêu “theo phong trào” chỉ có thể đem đến những tổn thương cho tâm hồn nhạy cảm của em…

Vì vậy mà hãy cứ bình tâm, em nhé. Cuộc đời ta cũng như rượu vang vậy. Có những loại vài tháng là uống được. Nhưng cũng có loại phải lưu giữ rất nhiều năm để đạt độ chín cần thiết. Điều quan trọng không phải là sớm hay là muộn, mà là đúng lúc. Bởi mọi thứ đều có thời điểm của riêng mình. Vị rượu ngon chính là phần thưởng của tháng năm.

Cũng như câu chuyện về hai chú sâu kia. Sâu anh nằm trong cái kén cảm thấy bực bội vô cùng, nên cố vùng vẫy thật mạnh để mong thoát ra ngoài. Vùng vẫy ngày này qua ngày khác, sâu mọc đôi cánh bé. Nó lại cố ra sức đập cánh, đôi cánh dần lớn ra, cứng cáp. Và cuối cùng, sâu anh hóa bướm, rũ bỏ cái kén chật chội để bay lên cao. Khi đã thoát ra rồi, nó mới thấy sâu em vẫn còn mắc kẹt trong kén. Nó hăm hở lao đến giúp em phá vỡ cái kén và đưa sâu em ra ngoài.

Thế nhưng, em biết không, sâu em mới chỉ có một đôi cánh mỏng manh bé xíu. Nó không thể bay lên như anh và cũng không còn chiếc kén để bảo vệ thân mình. Bướm anh khóc ròng nhìn em bị đàn kiến tha đi.

Tôi nhớ có một câu danh ngôn, đại ý rằng “Bạn sẽ có được con gà con lông vàng mũm mĩm bằng cách ấp trứng, chứ không phải bằng cách đập vỡ cái trứng ra”. Vậy thì đó là lý do tại sao con sâu phải nằm trong kén đủ ngày rồi mới được hoá thân. Cũng như con người phải chín tháng mười ngày mới nên rời lòng mẹ. Đó cũng là lý do của ba mươi chín giây đèn đỏ, của mười hai năm miệt mài trên ghế nhà trường, của một mối tình thiết tha còn chưa chịu hé lộ. Và của rất nhiều khoảnh khắc chờ đợi trong cuộc đời.

Mọi vật đều có thời điểm của mình. Em đừng cố rút ngắn thời gian. Nếu trái chưa chín thì đừng nên hái. Nếu nhộng chưa chín thì đừng phá vỡ kén tằm. Nếu chưa gặp được một tâm hồn đồng điệu thì đừng trao gửi trái tim. Đừng để thế giới này tác động.

Xuân qua hè tới. Đông sang thu về.

Đừng nôn nóng khi nhìn thấy những loài cây khác đã khoe lá khoe hoa. Hãy cứ bình tâm. Hãy đợi thời điểm của mình, em nhé. Hãy tận dụng khoảng ngừng lặng này để bồi đắp cho chính mình và học cách khám phá điều sẽ xảy ra. Nếu em biết suy tư, khoảng thời gian chờ đợi không bao giờ là vô nghĩa.

Vì thế, dù cuộc sống có trôi nhanh biết mấy, em nhớ để dành trong đời mình những khoảng lặng thời gian cho sự đợi chờ. Không chỉ như chờ đèn xanh bật sáng ở ngã tư, mà như chờ rượu chín rồi hãy uống.

Như chờ tình đến rồi hãy yêu.

Phạm Lữ Ân

Programming will never be “easy”

There seems to be this idea going around the internet that the reason someone isn’t able to program, is because languages aren’t good enough yet. A couple of people I have seen with have gone so far as to insinuate that the reason programming is to hard for most people, is because we design our languages to be too hard, just to keep people away from programming, and to secure our jobs. In reality, programmers are not trying to make their jobs harder, they are constantly trying to make their jobs easier. The truth of the matter is, programming is just hard.

Some people argue our current languages are too cryptic, other people argue that we need to abandon text-based languages all together, and just use GUI languages. What people don’t realize, is if GUI languages were actually easier, everyone would understand electrical engineering. Most people don’t understand electrical engineering, not because they don’t understand how to connect wires, but because they don’t understand the logic, math, and general engineering behind it.

As for the argument that programming languages are too cryptic, this is just a misunderstanding of what people really want. What people really want, is magic. So is an easy programming language impossible? No. Programming languages have plenty of room to get easier, and to evolve, however the act of programming itself, will never truly be easy, unless you are doing the most basic of tasks.

So just for amusement, what would the easiest programming language look like? Lets say we want to create a window with a table view that adds entries when someone clicks a button. What people would like, is to have a language that would understand some message such as

“Create a window with a table view, and then when someone clicks a button, add an entry to the table view”

While in theory its fully possible to parse a fully human-language, and then generate intermediate code based off of that, in reality, we don’t have that type of technology quite yet, as well as there isn’t near enough information given. What style of window? Initial position? Color? What about the table view? What type of data are the entries storing? How does the user interact directly with the table-view? What about menu items?

Also, what happens if we create two windows? How do we address first one, then address the second one? Well, we have to have some sort of variable naming convention, such as “Create a window named window1” wait, that’s going to be a challenge for the parser to interpret, are we naming the window window1, or are we setting a variable called window1? Lets redefine our variable definition syntax. “Create a window with title ‘Window 1’ and variable name wnd1”. Rather wordy, and already this language is getting complex.

What if we need to do something complex on an engineering level, such as create a scheduler? We can’t just go “Create a scheduler”, we have to figure out how its going to tie in the system, and fully understand the outcome of the code we write, as well as the internal code. So we’d have to describe every variable creation, and every action, to extreme details. It’d be easier to do it in a standard programming language, quite arguably.

All of this is not to say trying to advance programming languages is a bad idea, I’m just trying to explain, no matter how easy the programming language is, if you don’t understand the logic behind the code, you won’t be able to write it in any language.

Source: mdmstudios.wordpress.com

Thursday, September 9, 2010

Remember when...

 

boulevard of broken dreams © 2008. Chaotic Soul :: Converted by Randomness