Getting My Hands on Something New [closed] - cryptography

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
I am not sure if this question is relevant to this Stackexchange site or not, but here it goes.
I have just graduated in Computer Science and I will be on my Job from next month onwards. Till now, during college, I did most of what was in the course structure without really exploring much. I like Algorithm Designing, and tend to keep working on that for the rest of my time by solving a myriad of problems available online. EDIT Apart from this I have covered Databases, the basic stuff that is how to retrieve, manipulate data and also the Indexing [though I scarcely remember much of it], Operating System, read about it, the processes, and file system [ a bit weak ], Computer Networks etc., that is the all the basic courses that are expected of a CS graduate.
Now, I wanted to learn something new in the field of Computer Science. I want to take it up, and read about it, and maybe work on some small and simple project, so that I feel confident enough, like I fee about Data Structures [though I am still learning, but having worked with it for a decent span of time, I have started to feel confidant about Data Structures.] I am in no rush, and would like to work for an year on it, since with my job at hand, it'll be difficult to devote time, like I could while in college.
Now, if someone were to suggest some branch of Computer Science, that fits my interests and will be interesting to work with. Also, along with it, a head start on where I can begin learning about the same, maybe, books or other material.
Interests : Logical Thinking, Algorithm Designing, Software Level [I never like Microprocessors or Computer Architecture].
Also, I read about different branches of Computer Science, and Artificial Intelligence really excited me, since it sounds cool, but I am not sure if it is as exciting to work with, as it sounds.
EDIT It's not exactly Artificial Intelligence That I am looking for, I just want to explore a new branch of Computer Science and would love to know from the people in those fields, about what to expect and what not to. I am as ignorant of AI as any other field.
I am not which Stack Overflow tag would go the best with this question, hence I just added Computer Science and Artificial Intelligence and all others that I could think of [Limit on tags is 5]
I've spent so much time with the basic coding stuff and solving problems [ though I still have not done even 0.1% of the stuff out there], but I think I would want to take on something new and exciting to keep me occupied and hooked even more.
PS : If this portal is not suited for such questions, let me know, if I can ask it on any other StackExchange website. I'll take it down.
EDIT
I am 22 years of age. I got a job offer from a decent firm right after college, and had planned to go for MS, after a couple of years of job, [having made some money for the college]. But a few days back I was going through the Courses offered by the universities like Carnegie Mellon, Cornell etc. and it hit me if I really needed a Masters Degree. If I really needed the certification that I know something , rather than knowing the stuff in real. And I inferred that all I want is to know stuff, and know it deep. I am fairly diligent student, and pretty sure of my capabilities. If I set out to achieve something that excites me, I do achieve that most of the times. And even after MS, my main motive would be to get a decent paying job, but I guess, I'd want to learn even then. And in the end, maybe own something of my own. Some little 'Technical Venture' that may be as simple as it could be,yet something of my own. And Hence for that, I guess, I don't really need MS, if I can study on my own. I know it will be difficult to maintain it with my current job at hand, but my passion for learning will drive me forward. I want to pick up something afresh, that is exciting and that I can work with for a good year or so. And if I feel that I've done enough with that particular field, I'll try to pick up something new.
So kindly pour in your valuable thoughts and help motivate a rigorous learner.

I remember studying Artificial Intelligence, and I think it can be as cool as you think it will be. It's just really hard! Also, not sure what the job opportunities are like.
If it's something you'd like to play with though, I'd recommend doing a bit of reading with neural networks. I think they're a little outdated now, but I remember they showed me what sort of things can be done with AI.
I'm afraid I can't think of any resources on it at the moment, but there should be loads of introductions out there.

Related

Is This Normal Development Procedure? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 3 months ago.
Improve this question
First a little about myself. I am not an experienced software engineer, architect or developer. I have done mostly small ASP and ASP.NET projects in C# for the last 5 years. I am pretty good with HTML and JavaScript. These projects were done when I had free time from my other duties which were not related to software development. I have now been moved into a software developer position. The company I work for is not a software development firm.
I am now working on a Silverlight LOB application with WCF and Entity Framework. I have been given little specifications for this project, just the 'make an application like X, only simpler so we don't have to pay for it', my boss doesn't check on my progress as often as I think he should, the project manager(a co-worker) will stop by now and then but we never discuss the specs, architecture, UI or business rules. I am mostly just asked when I think it will be done. I have had to learn Silverlight, WCF and Entity Framework to work on this project which is not a problem as I really enjoy working with these technologies. The problem is I am the only one in the company that knows anything about these and have no mentor/boss to discuss the problems and how they could be solved. I have been able to seek out one interested party in the company that has at least given me a list of some of the requirements.
I can't believe this is how software development should be done. I think the project managers should offer guidance and keep a closer eye on what is being done to prevent going in the wrong direction(but how can they in my situation since the don't know the technologies!).
Should I feel this way or am I way off base?
Thanks for listening.
What you describe is certainty not optimal, but it's extremely common, particularly in smaller shops. Some people find it rewarding to work in that kind of environment. It's not what the software engineering books teach, but that's why there are so many software engineering books.
If you want to continue working in this environment, you're going to have to supply all the discipline you rightly recognize as missing yourself. Write up a spec. Build a schedule. Share these with your management. Hold yourself to deadlines.
Share your concerns with your management; don't be shy about that. Chances are, they recognize the situation. Your boss doesn't check your progress? Publish your progress to him. Show him where you need to get to, how far along you are, and what's blocking you.
It'll be chaotic, no doubt, but you'll learn a lot.
Every organization is different. If they are operating in this capacity then you should adapt and make the best of the situation. It's either happening because that's how things are done and they are aware of it, or they don't know the wiser or don't want to invest to improve the process of delivering strategic/tactical projects.
In a perfect world everyone would have a robust Quality Methodology in place which would provide a framework for Project delivery and systems implementation. It's just not a reality.
Here are some tips to help you operate more effectively:
Identify your sponsors (the people who own the product) and determine the high level benefits and driving objectives of the business problem they seek to solve
Identify your stakeholders (who has influence and who has interest) and get them to communicate their needs as much as possible
Involve both sponsors and stakeholders in the process as much as possible or as much as they want
Capture what requirements you can from them through written form (email)
Provide opportunities for them to gain visibility into the delivery and to provide feedback
Your project will likely fail from your boss point of view. Because i'm sure you developing program not suitable for him. But you don't feel guilty. It's your boss' pain.('because you are good programmer). Sorry for so dark post :-).
The role of the project manager is not to know the technology, but they definitely should have a finger on the pulse of the project, so to speak. The real project management job is not to control the project, but rather to enable it. Either way, from your description, looks like yours isn't doing such a great job at it.
The other extreme is a process-heavy organization where meetings and committees decide everything, and all the real communication, if it exists at all, happens through side channels.
The ideal world lies somewhere in between.
Your project manager should not be too concerned with how you're doing things. Since they have no qualifications, the best they can do is connect you with someone who does. When they can't verify that you're building the thing right, they should at the very least ensure you're building the right thing. Even if it's for internal use, you still have a customer, and no communication with the customer spells bad news to me. :)
If your PM is not concerned about the issue, you could try to do something yourself. For example, ask the PM to connect you with a would-be end user of the application. Extract bits of your application and give them to the user to play with -- just make sure the bits you give them don't look or feel too finished.
If you can't change things, take this as a learning experience. Make sure next time you're up for a project, you know the things that went wrong last time, and try to mitigate them from the start.
And finally, if your bosses tell you this is a "more agile way" of working, punch them in the face. Agile is, or should be, synonymous with discipline, not complete lack thereof.
Good luck!
It is a hard situation. Only you can really determine the best way to proceed. However, I do think that the concern with the schedule and concurrent lack of documentation (requirements, expectations, use-case scenario documentation, etc) is a train-wreck waiting to happen. Even the sharpest and most experienced dev-teams suffer from the same problems.
The "when will it be done?" questions are best mitigated by regularly providing small partially functional builds that you can use to get useful information out of the moving target that is your customer. It is amazing how much communication can occur when somebody (your boss/customer/end-user) can actually "play with" something in front of them and reconsider what they really want.
I believe this situation is quite common. I had this, too, at my previous job. Here the bet is on the fact that you are already independent and well-versed in your business. I think you should tell your manager how you feel about this.
They should change something after hearing your opinion about this situation. Because if you do something wrong and the manager does not notice it, the company can lose a lot of money and time.
But it’s also not worth constantly waiting for someone to guide you and check your work. In any case, your workflow should have self-management.

When is it too long for someone to return to a development role from other roles? [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago.
Improve this question
What would be the best way to bring people back to "their first love", i.e. programming, from other roles, e.g. sales, management, support, testing, etc.
This may become an issue given the current state of the economy.
I'm not talker about the CEO who last programmed ALGOL using punch cards, but someone who has more recently moved away from programming into a role that they realise is not for them.
When is it too long "away from programming" for someone to make the switch back and make a useful contribution?
I don't think the time away should be used to define whether a person is ready to come back. I was a dev for a long time, moved into management, and then into executive management, and finally decided I had to come back to development. The key to my ability to do it was that while I was "away", I was still following the industry closely and I still did little side projects to keep my skills (and my lust for development) sharp.
So, I was away for almost ten years and I am back at it and having a blast.
HTH,
Colby Africa
You can always come back.
It's more a matter of; how long will it take to ramp back up?
I'm afraid the unhelpful answer is that it depends entirely on the person.
Just as I would never judge someone by how long they've been in the industry, I also wouldn't judge on how long they've been out of it - if they can be a useful member of the team and contribute, then that's all that matters.
If the person realises he's wrong at the new non-programming position, then "coming back" probably works even after quite some time. He might even be a better developer than before, since he had some helpful insight somewhere else, probably towards the "bottom line".
If not, if he's being demoted back to development monkey, then probably a single minute is tool long.
All in all it's a dynamic process. I've seen people changing roles in the lapse of 2 years, when in the beginning they seemed stuck to programming and did not feel good doing "the managment thingy" when later they could not develop properly anymore, liked the job they were now doing, and said they'll never get back.
And then of course, it's a personality thing: Personality of the person, and personalities of the surroundings: If somebody out of a group get's their leader, it might be harder to get back into the lines.
I hope we have learned from the Y2K era when many people from liberal arts areas were brought into IT to try and address a shortage of IT personnel. I am not saying people from other fields can't make great programmers, but I think they have to at least have the logic/problem solving skills and some training.

Coding Test - allow use of web? [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago.
Improve this question
During hiring a .NET web developer I give the candidate a coding test.
I tend to limit the candidate to MSDN installed on the test server - I think it holds everything the candidate needs to complete the task.
I admit, this is not the normal case as I don't expect the candidate to do his work without use of the web.
On the other hand I don't want the candidate to google for a complete example and copy-paste it, i want to evaluate his skills.
The question is do I need to allow free use of the web during the test?
If you think the whole coding test is wrong - I would like to hear alternatives you may have for me.
As you say, 'I don't expect the candidate to do his work without use of the web' why not allow it too during the test? And what if he does copy and paste? I do that too. Surely the key is to know where to look, be discerning with what you find and apply it intelligently. Do you want to hire someone with a terrific memory or someone who can develop software for you?
When I was at school, calculators were just becoming affordable. As their use was seen as unavoidable, the exams were changed. Simple number-crunching was no longer tested in the way it was before (it was important then). Rather problem-solving techniques were to be tested.
I usually allow candidates to use whatever resources they want. After they're done, I sit down with them and go through their code together, ask questions like why they chose that particular approach etc.
If a couple of minutes of Googling was enough to not just copypaste some code but to learn enough about it to be able to defend the decisions within, then he's intelligent enough!
There are tests, where web access can be given, and there are where it doesn't really make sense.
Case where its fine to allow web access
When its unlikely to find even 60 percent of the code over the net
When you will ask to explain the code after he/she completed the code
A very specific solution using SQL query, which is unlikely to be found on the web
Case where its fine to not allow web access
Some basic programs like, recurssion, fibonacci, factorial, string manipulation, small trick programs, etc. There is no need of computer even in some of these cases
I'm very sceptical about coding tests during interviews. I think that a lot of the test I have seen, represent very specific (artificial, non real-world) problems where you would use the internet to solve them.
I think it's not really important to know how to solve such problems by heart - often time it is much more important that you know how and where to search for answers.
If you want to test the persons during the interview, I think it is better to ask them some conceptual questions instead of a specific programming problem. E.g: questions about object orientation, polymorphism, design of n-tier application, etc. etc.
Or as an example from the ASP.NET world, ask the interviewed person question such as: what is ViewState, what is a postback, what is session-/application-state, etc.
If you want to get an idea of how a candidate will perform in a job, I think it's best to try and make the conditions of the test as close as possible to the actual working conditions.
It should be pretty easy to prevent copy-and-pasters from slipping through the cracks by asking the candidate to explain his/her code.
Well, one thing you want to be aware of is that the developer you hire might not know everything that he will be thrown during the time he is working for you. If you ask him a question that he doesn't know off the top of his head you would want and expect him to research it and come back to you with proof that he understood the concepts that he just learned.
I say let them use the web - but ask them to explain in their own words how their code works. Most of my knowledge comes from online resources. However, I make sure that every line of code I write I understand.
There is a baseline knowledge that developers in a particular field should know; but you also want to figure out how quickly he can learn new things. A good test IMO is to throw a question you know he doesn't know and see how long he can figure it out using the resources he would have if he were an employee of your company.
Is your goal to see what basic knowledge the candidate has and if he can code without copying solutions from the web, then don't allow internet access. If you want to see what strategies he employs to get to a solution, let him use the web if he wants to.
I personally find it more interesting if a candidate can solve problems on a larger scale than just solving a simple programming problem. So I tend to ask him about the methods he uses when programming (Unit testing? Ever worked with it? What do you think of it?). This gives me a better picture than coding in an interview situation.
Sometimes it helps if you ask the candidates beforehand to bring a one-page coding sample to take a look at their coding style. This also saves you time during the interview.
It's important to make sure a candidate is resourceful - you don't want your programmer sitting there when they get stuck, not moving forward; you want them to use whatever resources are at hand - be it MSDN, picking someone else's brains, using the web, etc - to get the job done. Cut-n-paste from the web does seem like cheating, but (a) if you design your task carefully then it will be unique enough for there not to be a standard answer they can copy from the web, and (b) isn't re-using existing code a key part of building software? It's not much different from using 3rd-party libraries, to avoid reinventing the wheel. On the downside, of course, you also want them to show they can develop algorithms, so the unique task needs to include some element that requires that without the solution already being on the web. Trouble is, forums are the achilles heel to all of that since they can simply ask for the solution and someone, somewhere, is going to hand over the answer unwittingly!
Allow the candidate to use the web but tell him beforehand that if he used the web, you will have to evaluate HOW he solved the problem.
If he used the web for something simple such as finding the syntax or parameters which he forgot, don't mark him down. This is normal.
If he used the web for something like look at how a specific function is used, don't mark him down. This is normal.
If he searched for a specific code and then copy-paste it, then ask him about how the code works. If he can explain how the code works, then there's no reason to mark him down. If he can't explain it without looking at the site where he got the code, you have to mark him down.
If he used stackoverflow.com, check his profile for questions, answers and badges. From there, you can check how good a programmer he is.
It all depends what you want out of your successful candidate. I contest the view that knowing how to google makes you a good programmer because the simple fact is that the internet is full of bad examples as well as good ones. You don't really want your codebase to reflect how lucky your googler was on the day he cut and pasted all his code off the web. You want it to demonstrate sound practices, proven methodologies & elegant, efficient solutions that your team understand and are enthusiastic about. Not a jumble of styles that don't resemble each other. There's a wealth of good to be gotten from knowing how to get help from the interweb but real knowledge and ancient wisdom is being lost every day that people who don't really understand what they are doing are given jobs because they appear to solve problems with their ability to "google it".
If you really want to give your candidates access to the web then by all means do, but make the questions hard and scrutinise the results to see if they've picked the first solution they found or if they've picked the best solution to the problem.
As do many other respondents, I'd rather employ a resourceful developer who know how to use the web to the fullest to draw on other's experiences and previous work, than a developer who limits himself and his applications to the MSDN way of doing things.
I copy other peoples code all the time - daily in fact. The knack of it depends on finding the right solution quickly and integrating it into your existing work.
So let your candidate use the web and ask him how he came to his solutions. You might learn more about him from his methods than from how will he can remember previous solutions.
Three things I'd do.
Let applicants send in a coding example along with their cv.
Let applicants produce some real-life code (maybe even pair-program with a developer on your team) this will show you if they can actually use the tools. Internet is a tool too so they should be able to use internet.
Let applicants solve a problem in pseudo code on a blackboard during the interview. In this case you can be their "internet" by helping them.
These three approaches will show you different things. The first is a good early warning mechanism but can easily be faked (they could just download oss code from the web somewhere). The second is good to see if they can actually code but they might score badly if they're unfamiliar with the tools you use. The third will show you if they can solve theoretical problems but won't show you if they actually are good team players or if they write maintainable code.
I recently had a friend start talking to me on IM, he was in a coding test job interview. He had a couple SQL questions. At first i thought, hell you've got to do this yourself. I'm not going to help you cheat during an interview.
Then i thought about it again. I've been answering questions and talking to him about various technical issues for years on IM as part of his work. So when he encounters problems in the real world with the job if he gets hired, he'll do the same thing.
We don't talk about it much, but having a good network of friends to ask questions, and knowing how to search out relevant answers on the net are a big part of being an effective programmer or sysadmin. I've met people who were super smart programmers, but didn't really know how to find information online. They missed a lot, were kind of out of the loop. Knowing how to use resources should be important.
When i do interviews i often ask people what websites they read, what development tools they use, and why. It's a similar thing. Sure it's not about how they write x line of code, but it's about how they work.
No how to get around somebody just copy and pasting "answers". Well first, don't ask questions which have pat answers. Secondly when i'm interviewing i like to give people some code, ask them to refactor it, have them talk through what they are thinking. Then ask them to write some new code which implements a feature. Pair program with them. It's hard to hide inability to code when pair programming. While they are pairing, it totally makes sense to say, "let's go look up the api on the date time library."

"Winning" OO programming job interviews with sysadmin/Perl/Linux background? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about programming within the scope defined in the help center.
Closed 9 years ago.
Improve this question
I'm a student in software engineering in Montreal. For the last 3 years I've had a few interships (once per year). The first two (in the same company) were mostly sysadmin jobs, but I did get to do a few Perl programs (mostly log file analysing and statistics generation).
My other intership was in the IT security field. I did a huge CGI Perl script to analyse time spent by users on the Internet.
The thing is, what I really want to do is programming, but my interships were mostly sysadmins jobs with some programming (due to my previous experience with Linux and UNIX).
I have another internship this winter, however I would like it to be in the OO programming field, and SW engineering.
I have a background in system administration but I know OO quite well, due to my college courses and projects (C++, Java, VB.NET, ASP.NET, but not C# unfortunately :( ).
My question is this : how can compete, in interviews, having no previous work experience in the OO field (though I build some projects in Java, Swing, etc., and am learning JSP right now), with other students with OO experience in previous interships?
What should be my "selling points" ? I consider myself quite a good programmer, but my previous interviews didn't turn out well due to my lack of experience. In fact, I got an intership last winter in system administration, since, well... that's my background!
Any tips on how to convince a potential employer that I am the perfect candidate despite my lack of professional experience (but lots of personal knowledge (and interest)) ?
Thank you,
Guillaume.
[EDIT]
Thank you all for your support!
I'm not out of school yet ; I am still a full-time student! My university program is a cooperative one : I have to get 3 internships to get my diploma.
Let my explain briefly my background : this winter will be my 4th internship.
My first two were while I studied in CÉGEP, Quebec's post-high-school but pre-university schools.
The first one was pratically given to me by CÉGEP : a employer called in, searching for someone knowledgeable in Linux system administration. I fitted the job perfectly since I was the only student who knew Linux outside of school. My interview wasn't even a real one, since all the details had been discussed between my school and the employer : I knew that I was hired even before doing the interview.
The second one was in the same company, one year later, since I liked my first one very much.
Then I arrived at my university, where every student is required to have 3 internships to get his (or her) diploma. Having no real experience in computer science interviews (since my first internships were "given" to me), I did a few screw-ups when doing interviews for OO jobs. I finally managed to get an interview for a security / sysadmin / Perl programming job at Bombardier Aerospace.
My internship went well, but now I want a real software development job. All the people I know had one last winter, which mean I am disadvantaged in terms of experience.
However, I DO have programming experience. All my internship required me to do a substancial amount of programming, especially in Perl. My Perl skills are quite good, and I got to develop some nice tools for both companies I worked in. I solved real problems not seen in school (like how to parse efficiently 5 GB log files while keeping memory usage as low as possible).
Obviously, I can easily get an internship this winter if I apply on jobs in the sysadmin domain or Linux world. There are a few of them available each year and I've got a lot of experience in the field, but as stated previously, I would like my next internship to be in SW development.
I am currently working on a personal project in Java, which is a small UML class editor. So I get to deal with the Swing framework, listeners, MVC architecture, etc. This is not as big as what is being done in the "real world", but it a fun project and I am having a lot of fun doing it, and if I can get it quite advance in the next month, I will probably put in on SourceForge. In the same time I am learning JSP.
As for OO open source project, this is something I should be looking into. I probably won't have time for it right now, one month away from my first interviews, being a full-time student, but I am not putting this option away.
Anyway, thank you!
no offense, but from your description it would appear that you're not really qualified for a 'real' OO programming job. Academic classes are a good introduction to a language but no substitute for solving real problems with fluctuating deadlines, finicky users, cholicky managers, et al ;-)
this leaves three options:
join an open-source project that uses OO and a language you know, and contribute to it significantly. This will provide an analogue of real programming experience [but not real job experience] and may help you get a programming job in another year or two
or, apply for an entry-level OO programming job and impress the heck out of the interviewer with your communication skills, contagious enthusiasm, eagerness to learn, commitment to the customer/user/whatever, etc. In other words, present and sell yourself truthfully but as the 'complete package' needing only the opportunity to explode.
Don't be discouraged if you get turned down a lot
don't apply for jobs you don't really want
expect to stay in the job for at least a year if not two or three, to really learn how to program in a non-academic environment
start your own business as a consultant, programmer, freelance, and/or develop products, and learn at your own pace. This is risky when out of school, less risky when in school, and if you happen on an unoccupied niche can be quite lucrative
Well, one place to get immediate, documented, experience is through open source projects. Join a project, or start a new one. Help with documentation on OSS projects (employers would love to see that). Help with writing unit tests, contribute patches, etc. And the sooner you get started, the better.
Open Source experience is good and experience and it shows a level of dedication to development and the language that you work in.
Good Luck
Aptitude and enthusiasm will get you a long way. If you can answer interview questions, work through programming problems, and you have personal projects that you are working on, lack of experience shouldn't hold you back too much.
Make sure you nail the questions, though. If you don't have experience, you've got to know your stuff cold to make up for it.
Be sure to emphasize side projects. If I interview someone who likes to spend their free time at home coding, they get lots of bonus points.
First, one thing I always follow that has never led me wrong is honesty. If you don't know something just say "I don't know". This is so important when it comes to programming interviews and very easy to follow.
Next, take the time to start and/or get involved with some open source projects. Saying that you worked on an open source project says alot. First, it shows that you can grok other people's code and have the resolve to work collaboratively with other people in the programming community. This goes a long way. I have come across employers that actually skip the screening process when they can confirm that I contribute to various open source projects. This is probably your best defense against little experience in the field.
If you have the experience/drive then do presentations and/or coding sessions at user group meetings and/or code camps. This also goes a LONG way. Displaying that you can talk and converse with other programmers in a scenario like this, it shows employers that you enjoy programming and working with the community.
Finally, start low. You will need to start at the bottom of the totem pole, but work hard and show that you are a quality programmer and recruitors/employers will be banging down your door.
By the fact that you A) posted a question to this site and B) have a blog it appears, it shows you have passion. That is one thing a lot of people don't have so you that to your advantage. Use that passion to further your knowledge.
If you are truly passionate about programming as you say, then just start programming. You can't learn how to program by thinking your way through it. The only way to get experience is to program. For someone like yourself, find an open source project you want to help and start contributing. That will give you valuable experience in using source control among other things.
The other thing is find a technology that you feel you can really get behind and go deep on it, learn any and everything you can about that technology and that platform. Immerse yourself. The reason I say that is because someone isn't going to hire you if you know a little about this and a little about that. They expect you to be able to walk in and do a job. That doesn't mean you shouldn't "play" with other things, but do yourself a favor and leave them off your resume unless you have production experience with them.
Hope that helps.
-Keith
Bring with you some Perl code that:
demonstrates a programming style that you can be proud of,
does something significant and useful, and
is object-oriented (for good reasons, not just to demonstrate that you can regurgitate syntax)
Contribute patches to some CPAN distribution. This will show that you: 1) use CPAN - managers love peoples that can write code faster 2) can read and modify someones code.
Study Moose/Mouse - it is modern OO system for Perl, it is much better that old OO system that was copied from Python.
Every company is different. I have been a Senior Software Developer at Software companies, and I was never even asked a programming question.
Do your best in the interviews and just be yourself.
I find OOP to be useful, but sometimes overrated paradigm to work within. Functional decomposition can get you pretty far.
You may have received a good grade in your C++ class, but would the professor recommend you for an internship?
Your school's reputation or lack of it may be influencing the selection process.

Do you follow the Personal Software Process? Does your organization/team follow the Team Software Process? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 9 years ago.
For more information - Personal Software Process on Wikipedia and Team Software Process on Wikipedia.
I have two questions:
What benefits have you seen from
these processes?
What tools and/or
methods do you use to follow these
processes?
I went through the training and then my company paid for me to go to Carnegie Mellon and go through the PSP instructor training course to get certified as an instructor. I think the goal was to use this as part of our company's CMM/CMMI effort. I met Watts Humphrey and found him to be a kind, gentle soul with some deeply held ideas about process. I read several of his books as well.
Here's my take on it in a nutshell - it is too structured for most people to follow, assuming you follow things to the letter. The idea of estimation based on historic info is OK, particularly in the classroom setting, but in the real world where estimates are undone in a day due to the changing tide of requirements and direction, it is far less useful. I've also done Wide Band Delphi estimation and that was OK but honestly wasn't necessarily any better than the 'best guess' I'd make.
My team was less than enthusiastic about PSP and that is part of the problem - developer buy-in. My company was doing it for the wrong reason - simply to say "hey, look we use PSP and have some certified instructors!".
In the end, I've found using a 'agile' approach to be better. I have a backlog of work to do and can generally estimate it pretty well. I've been doing it long enough that I can make pretty good rough estimates on time and frankly don't think that the time tracking really improves things much. Perhaps in some environments it would work well, but at my place, we'll keep pumping out quality software without all the process hoops that yield questionable benefits.
Just my two cents.
I got into this once, even tried using PSP Dashboard.
It's just too hard to keep up with. Who wants to use a stop watch for all their activities? Follow Joel's advice on Painless Scheduling and Evidence Based Scheduling.
+1 this question, -1 to PSP.
I have used the PSP and TSP process by heart for 4 years (though it was in the begining of my software career). As an idealist you will love what is being done by you and ofcourse Yes there are amazing results as well.
Though PSP advocates the recording of your defects to the core (such as ; or typo's), I was in a conversation with Mr. Watts Humphrey where lot of people asked him about the advancements of compilers and missing of object orientedness (which I felt, how is it missing, as I was an OO Programmer and was using it successfully). There was a very good answer provided by him. It went on like, "PSP, or as a matter of fact any process methodology, is not a concept thats stuck on a single idea. The core idea is to introduce people to the quality methods and analysis.
"Its always adaptive. You can tailor it to fit to your needs. If you feel like you will go with Function Point methodology, you are alright to go ahead with it. Same for any estimation techniques. But you should do it constantly and repetetively.
"Same with the advancement of compilers. If you feel like the WBS in the structure of PSP won't fit to your development, do modify it and use but again do it constinuously.
"As you do it continuously, you will have collected the historical data of yours and will be statistically do a predectable and accurate estimates on all the parameters"
May be I am giving this answer late but when I read all the replies, I felt I wanted to share this.
As per the tools, we have Process Dashboard, the PSP excel sheet and all.
For the PSP, I have seen the Software Process Dashboard, but it seems awfully difficult to use.
I learned it just this last semester in college and it worked great for me. I know that by following it to the letter I can be confident I can hit Compile and won't have any errors and by hitting Run I won't have to spend time anymore fixing and re-compiling the program to run it again and again till the mess is fixed.
People complain about having to record the "missing semi-colons" and such but by the time you're on program 7, you're no longer making such trivial mistakes and instead your defects are found in the important bits of your program. I have not had the opportunity to apply it to a real scenario though but im really looking forward to!
I try to follow the PSP 2.1 process when possible. It really helps me keep a focus on not skipping important, but less exciting, portions of a project. Usually this is design and design review for small projects.
To keep track of time you can use the PSP Dashboard, which has a bunch of built in features and scripts that help you follow the process.
If you are just looking for a time-tracking tool, I also like http://slimtimer.com. It can also do some decent reports.
I've been using PSP for the last six months.
It is time consuming. For my estimations I had to spend 7% of my time filling forms.
It is frustating to have to put the mistake "missing semicolon" over and over again.
But on the other hand as I get used to the process, it became important as I started to see which errors I was mainly doing and I started "naturally" avoiding them.
It also makes you "review" your code so you can see if there's any problem before hitting the compile button.
For tools I recommend using Timetracker: http://0xff.net/
I recommend at least trying PSP for a couple of months, because you will create some habits that help reduce the time you spend compiling and correcting minor bugs.
I have completed the PSP course, the next one is supposed to be TSP which is meant for team dynamics as others say. I have mixed feelings about PSP (mostly negative, but the results were interesting), I arrived to the following conclusions:
First of all my main source of frustration is that the design templates are way too tedious and impractical. Change them for UML and BPMN, tell your instructors from the start, IMPOSE IF NECESSARY. The book itself says that the design templates are for people who don't know or want to learn UML.
Secondly, estimations were the only valuable part for me. The book itself says that you can use other stuff appart from lines of code and it even tells you how to know how relevant they are statistically. My take on this (counting lines of code) is that a tool/plugin that connects with your VCS (git, mercurial) must exist and automate the building of your personal database, otherwise is too tedious to track base/added/reused parts.
The process itself is nice, but not applicable to big projects, why?, because it just doesn't cope with iterations. In the real world, due to requirement changes you will always have to reiterate on a project. You can still apply the discipline to small programmatic tasks, this is: plan, design, review your design (have design standards and a small checklist that u can memorize), code, review your code (have clear coding standards and a small mental checklist you can memorize), test, ponder on your mistakes. Any experienced programmer will know these are eventually intuitive steps to follow. My recommendation in real practice: follow the process but don't document other stuff than your design, and if you do implement unit tests, document them well.
This process might actually be worth to follow and practical... for real-time system programming where there is absolutely no room for mistakes, otherwise doesn't feel worth it.
If you are seeking for a methodology to organize and improve focus, try GTD (Get Things Done) and Pomodoro first.
If you have obsessive-compulsive disorder you might actually enjoy PSP =).
My final recommendation, learn from it as a reference, might lead to better and more practical stuff. This thing is just too academic.
P.S.: R.I.P. Watts Humphrey
I followed the PSP for a few weeks some years ago, because my group wanted to experiment with it. I found it very disappointing and even irritating to work with. It exhausted my patience. My main negative points are:
Ridiculous emphasys in things like typos or missing semicolons.
Impractical forms that you have to fill by hand.
Focus on procedural programming instead of OO.
Estimating involves counting the number of loops, functions, etc.
I found it a massive waste of time. I'd rather choose to leave this profession than to be forced to follow the PSP.
Related material: My answer about a PSP book in the "What programming book would you NOT recommend to developers" question.
I used it during university but at work we really don't have a process at all. Only recently have we started using version control.
My experience with it was that it seemed far too tedious to be useful. If it's not automated, then it can go away.