Archive for the 'Computer Science' Category
In response to my last post on Women in IT, a reader took the time to share with me her own experiences regarding women in male dominated fields. Her opinions complement the thoughts of my previous interviewee’s, and in the interest of forming a more fair and holistic view of this huge issue, I requested permission to share what she had to say here. While she has asked not be identified fully by name, I still wish to grant credit for the content of this post to Pamela M – she is the sole author of the content below, and it is very much worth taking the time to read.
As a woman studying the sciences and engineering, I was constantly made aware of my gender. My experiences in that regard certainly weren’t uniformly negative, but if I’d had to do over again, I’d have chosen a different field of study and save myself the experience of becoming an almost-but-never-quite-equal student.
Perhaps the most troubling aspect of education for female students at the institution I attended was the frequency with which a female student was simply addressed differently in the classroom than a male student would have been. I remember one gentleman in particular who would address questions from male students from the front of the room, but who would walk over and sit down for a chat nearly every time one of the female students had a question, so as to make sure that she received the personal attention she needed to resolve the issue. Multiple male faculty members would always call on the women first when trying to encourage classroom participation or never fail to praise each one for a clever answer. One faculty member would often mistakenly assume that any female student would remain ahead of the curve through nonstop hard work and he would look genuinely surprised when he encountered a female student hadn’t read ahead or wasn’t familiar with a topic from an upcoming segment.
These behaviors, while relatively complimentary in nature – assuming that a female student was most likely a competent and diligent student as well as exhibiting a true desire to make sure that female students in particular were encouraged to succeed – failed to take into account the desire of many female students simply to be taught and assessed in the same fashion as a male student. It wasn’t fair to either set of students to single out the women.
Other differences in classroom behavior on the part of a faculty member were less forgivable: failure to meet a female student’s eyes, speaking down to them, making assumptions about a female student’s predilection toward the arts and language rather than mathematics and logic, or even an increased tendency to behave as though his time was being wasted when a female student asked a question, whereas a similar question posed by a male student would be taken in stride. Of course, sometimes it was obvious that male faculty and male students expected the female students to be less intelligent than the male students, and more than once I witnessed a female faculty member obviously sharing that view (whether from her own experience or in reaction to the female recruitment drives ostensibly allowing less intelligent women to enroll, I couldn’t say). The most personally irritating thing to me was when a male professor, usually older, would speak to a mixed group of students and somehow only include the male team members in his address. It’s the opposite of what happens when you walk into a into a housewares department with your spouse and somehow, despite addressing the both of you consistently, it’s crystal-clear that the salesperson is speaking only to the woman!
I experienced less of a feeling of competition with other women than did the subject of your previous post, but I definitely saw flocks of young men crowding around female students. While somewhat flattering, at best it can make a woman dependent on having the answers available without learning to identify the resources available to her from an academic standpoint. At worst it’s downright insulting and offensive to the woman to assume that she needs the help (or company) any more than a male student would. It can be hard to discourage the more enthusiastic young men without causing offense, especially when they believe they’re being helpful and are simply attempting to be a good friend. When there are far fewer women than men around, it’s important for the male students to recognize that a female student may simply want to study and complete her classes without a lot of social activity, or that she may prefer the company of other women socially.
I do agree that some of our female faculty members were surprisingly less than impressive, considering others among our female faculty were among the best in the world. It generally tended to be the younger faculty members that were not up to snuff, most likely due to frantic attempts at recruitment on short notice, and it was easy to suspect that many of them gained tenure only due to a dearth of qualified female applicants. Their shortcomings weren’t helped by their male colleagues tending to correct them or speak down to them, even in front of the students, a practice which can intimidate some of the more intelligent women who would otherwise wish to continue on in their fields. A mentor of mine assured me that this practice can continue even into the highest reaches of academia: despite being head of one of the larger faculty committees and having been tenured nearly since the inception of her department, she still received “helpful advice” from her male colleagues and juniors, though never from other female faculty. Another female faculty member once discussed the fact that she’d often been told that she comes off as very strict and never smiled or praised a student in class. Only for a female professor would “not being sweet enough” show up on a performance review! A professor might be instructed to work on his approachability if it were genuinely interfering with students learning, but “smile more” is simply not an acceptable goal on which to base the salary of a long-established academic who is widely-regarded as one of the best instructors (not researchers, but instructors!) in her field.
I belonged to a women’s association on our campus and we used to speak a lot about the difference between wanting to be accepted as one of the guys and wanting to be allowed to retain some of our trained “female” characteristics in education and the workplace, and how a classroom or work setting generally tends to encourage one or the other but only rarely both. It’s important to recognize that, just like male students have different personalities and priorities, female students are individuals and will want different things from their educations and behave differently from each other in an academic setting. We’ve been trying to accommodate the “female” perspective for decades, and while it’s great that schools and teachers try to adjust their teaching to include different types of people and personalities, it’s important to recognize that those differences aren’t coupled to gender!
With any new female student, it’s impossible to say how hard it was for her to get to that point. She might have had an entire life of happy educational equality and be thoroughly confident in her abilities and consider her gender completely irrelevant to her education, or she might have had parents who disapproved of her choice of career and teachers who spoke down to her or graded her unfairly or any number of other things. Even if every single man attending the school at one time is a great, thoughtful, socially-savvy wonder of a human being, a woman’s experiences don’t start at the beginning of college! We’re taught all our lives about how women were for so long considered incapable of technical employment and not all of us want to feel like we’re individually responsible for proving all those past generations wrong. We read articles about how underrepresented women are in the sciences and technology, and some of us keep one eye open to see if we can figure out why. Even looking around a classroom and seeing few other women can be discouraging. For every woman who simply was more interested in studying a different subject than pursuing her interest in science or technology, how many others might really have wanted to be there and were simply discouraged or redirected or made to believe they weren’t good enough?
I think in the future it will be better. I think that women will be told more about the accomplishments of all people instead of just great women of the past, and gender will no longer really be forefront in our minds as we make our career choices. I think that interacting online with no one aware of their gender or judging them by their appearances has already helped younger women understand their capabilities. We need girls to learn well the difference between criticism actually based on their abilities and baseless criticism due to their sex and the stupidity of other children. We need to stop acting surprised when a girl shows a fledgling interest in science and technology so she doesn’t go into it feeling like she’ll have something to prove.
I think that as conditions continue to improve, more of the top tier of really intelligent women will stop saying “I’m not stupid; I could enter a different area of study instead and have a perfectly respectable and intellectually-fulfilling career without constantly questioning my own abilities and dealing with a male-dominated field, so why would I want to enter science or engineering or IT?” Women had easier in-roads into some of the more liberal arts-related fields because it was widely believed that they had at more of an aptitude for these subjects. If we consistently recognize that affinity and aptitude vary wildly from person to person regardless of gender and that women as a group are just as good at science and IT as are men, eventually these last few walls will fall.
The most important thing to remember is that at some point we started calling most of the gender education problems fixed, and they’re really not. A number of lucky women never encounter sexism directly in the classroom or workplace, and that’s a great start. But I can tell you from my own experience in college that I encountered far more sexism than I ever expected to see among such otherwise intelligent people, both for and against women. It’s easy to dismiss each occurrence as a one-time event, but it becomes harder to do when you realize how many times a particular thing has happened ‘only once’! Many of the remaining issues faced by a female student in a male-dominated field are going to be easily overlooked by others – a look on a teacher’s face, an assumption made without cause, a group of all the women paired together ‘randomly’, an independent study idea denied for no good reason, suggesting the woman do the note-taking in a group project – these still occur with regularity, even if you don’t notice it, and it’s amazing the more severe problems that can be equally ignored. Many women keep silent and try not to draw attention to ourselves because it’s easiest to blend in and let the minor things slide after years of practice, but others are going to demand fair treatment and call people on it when they’re being treated differently in the classroom, consciously or not, and it’s important to continue to listen and adapt.
Eventually those enrollment numbers will even out. If schools paid more attention to ensuring fair and equitable gender-blind treatment and made college a more pleasant place for women to mix into rather than press-ganging them into technical careers to meet enrollment quotas (leaving some to wonder whether they were actually entirely qualified), it might be less of a transition … but given some time and good parenting and teaching, eventually it won’t even occur to young women that they should have any reason *not* to become a scientist or technical professional! I think that’s a worthy goal to work toward, rather than artificially enticing all remotely-qualified women toward programs using money and special programs and opportunities. Perhaps more emphasis should be placed on retaining women in a field through the college years and into the career itself, when many women throw up their hands and leave to find something new. Women having uniformly good experiences in technical education will encourage more women to enter the same programs; all it takes is time.
Thanks again Pamela!
Rochester Institute of Technology has been supporting programs to encourage enrollment of women in their technical fields. The reason for this is painfully obvious if you happen to be studying computer science (like I am) – I think I had four women total in my nine or so CS classes this year, out of 150 or more men.
I always had assumptions of what it was like to be a woman in a technical field, but realistically, it is impossible to guess what it is like without actually experiencing it. So, being curious, I discussed it with one of the girls in the medical informatics program at RIT. She took the introductory CS sequence and has a large core of Information Technology courses, but I won’t name her so as to protect her identity. I expected some of her responses, but others caught me off guard. My questions are in bold, her responses in plain text. If you have any responses, leave a comment! I’m especially interested in hearing what other girls have to say about these items.
What is it like being a woman in a technical field?
It depends. Male professors really aren’t any different toward me, they are pretty even toward both genders. But in my experience, I’ve never had a good female professor or TA. For example, one of my TAs, a graduate student at RIT, liked a guy in a class I had with her. He liked me, and she knew it – the result was that she was horrible to me all quarter. In another class, I had a male lab partner, and we had a woman leading the lab. She was really nice and helpful toward my partner, but was cold (and frankly a complete bitch) toward me.
I also definitely have to try harder to prove myself as a capable individual. It is assumed automatically that we aren’t as skilled as our male peers, and it gets frustrating.
I thought there would be more cohesion between women in male-dominated fields.
I think girls think it is extra easy for other girls in these programs, so they are complete bitches toward each other. And there is this weird egoism, in computer science especially. Some of them have these little flocks of boys that help them, and they get pretty territorial over them. If you aren’t friends with the girl and you try to talk to the boys in their group, it is bad. I feel like that the culture among girls makes this almost a respected fact, you have to make friends with the girl who is in the group before you can make friends with the guys, otherwise it feels like you are encroaching on their “property”.
Really, I think girls hang out with girls they don’t feel intimidated by. Girls that are jealous of you aren’t going to be friendly, but that is true everywhere.
What do you like about it?
Guys give you help, they generally are less competitive with girls than they are with each other. You can also look like crap, and still get massive amounts of male attention.
Why do you think guys give more help to women?
All the wrong reasons. You know – they like you, they are trying to meet you, befriend you, and they like that you rely on them.
What do you dislike about it?
Team projects suck. All guys think that girls can’t code. It gets annoying when guys have no faith in your abilities. But to be fair, they may have had some legitimate experiences to support that opinion. Guys try really hard to help girls in these programs, and I think having stuff done for them all the time stunts their abilities. It usually shows which girls are doing this when tests and quizzes come about – or when you look at the quality of the code. But we don’t all do it! Guys should really give us a chance before typecasting us.
Would you like to see more women in technical programs?
It would be nice to be able to look up to women, you know, to have upper-classmen girls who know what they are doing. But honestly, trying to imagine more women is like trying to imagine seeing dinosaurs, it is just really hard because I can’t ever see it happening. It would be great in the sense that there would be more hope and encouragement for other girls seeing women getting jobs at big companies with their degrees. It would be more relatable than hearing about a guy doing it.
Do you think there will ever be gender equality in technical fields?
No. Most of this stuff is just not what girls are into. Look at engineering – it has been around much longer, but they are still having problems with female enrollment in engineering programs. I think if there were more female role models in these areas, there would be women to look up to, so other girls would see that it was possible for them to do too. It is kind of a chicken-and-egg problem, we need a lot of women doing these things to attract more women, but we aren’t going to see a lot of women doing them until that happens.
What do you have to say to other women who disagree with you about that?
If they really think equality will happen, that is great! But they should really share it, because I don’t see it. I know a ton of guys that hang around building 70 [RIT's computing and information sciences building. -Robert], but I never see any girls. The girls that are involved with the association for women in computing are nice, but they really aren’t doing anything effective to make the programs more attractive to other women. I’ve seen them once, giving out cookies. I really think it did more for the guys than the girls *laughs*.
Thanks for answering my questions!
No problem.
Barcamp Rochester 3 was Saturday, and it turned out to be an *amazing* event. The idea behind Barcamp is that it is an informal conference where there are no spectators, only participants. This means that everyone who attends gives a talk on something, ranging from programming languages to intellectual property to enacting political change through technology.
The talks ran from 10:00am to 10:00pm in three separate rooms, and given that multiple talks were going on at the same time it was impossible to see everything. I did attend Google employee Jordan Sissel’s “cool stuff I’ve worked on” presentation, jquery creator John Resig’s jquery presentation, frequency ninja Andrew Potter’s wireless and spectrum lecture, and a round-table discussion on politics. Needless to say, it was a very full day.
I personally gave an hour lecture on the same material as my most recent Society of Lectors lecture, covering hacking through exploitation and shellcode. The turnout for my talk was great, and for anyone who attended that is now reading this, thanks for being part of such a great audience! I really enjoy giving this lecture – I get excited about the topic, and it is great to see other people getting excited about it too. The questions at the end are always my favorite part, and given more time, I could have talked forever about some of the topics that were brought up because of them.
The biggest event of the day for me was a talk on how we can use technology to inform people, with a special focus on the US political system. It started as a round table discussion led by Remy D of the NYPIRG and James Turk of the Sunlight Foundation labs, with Dave, Heewa, and myself attending. It moved from ideas to implementable actions, and while I entered the discussion skeptic, I left with the feeling that it is possible for individuals to make a difference in a system that is much larger than themselves. I hope to engage in future work that will spread the same kind of hope to other individuals, because the opportunity exists to shake the popular apathy for our communities – and knowing it is somehow comforting.
On top of everything else, I’m helping Dave and Heewa with the One Laptop Per Child program at RIT. The organization is sound, and their ideas are worth pushing forward. I’m particularly interested in the mesh networking capabilities of the XO laptop, and my contributions will most likely be related to software that takes advantage of it. The reason I’m bringing this up in a post on Barcamp is because Dave and Heewa gave a couple talks on the initiative and their plans for it at RIT, and having finally obtained an XO laptop, I got to play with it! John Resig also had one, so we messed around with chat and video feeds. It was pretty cool, even though the size of the XO makes it kind of difficult to work with.
The event overall is just something you have to experience. There is nothing quite like a gathering of a bunch of smart people talking about what interests them. With few exceptions, everyone is really friendly and down to earth, which makes it really easy to just focus on the goal of the day: to share ideas, meet new people, and leave just a bit better than you were when you came.
Here’s looking forward to Barcamp Rochester 4!
Yesterday I gave the second lecture in my “hacking” series. We’ve progressed beyond general descriptions and terminology and moved into the technical aspects of the stack, vulnerable code, and crafting exploits. The lecture ran about 45 minutes, and was accompanied by a live demonstration of exploiting vulnerable code.
For those that came late or missed it, the slides are available here (pdf format), although once again the real content was in the accompanying talk.
The demonstration used three source files. The shellcode was written by BreeZe of binbash.org, while the other two are my own. They are:
Running the Exploit
First, I only tested the exploit running on Debian Linux, running a 2.6.23 kernel on a 32bit x86 machine. It probably won’t work on Windows or a Mac, and it definitely won’t run on your SPARC.
Second, I used version 3.3 of gcc’s compiler. Newer versions contain checks to make stack smashing harder, but 3.3 is free of any of these security features. You’ll have to use it when compiling these, which can be done by issuing gcc-3.3 -o <name> <name.c>, like:
gcc-3.3 -o exploit exploit.c
Third, Linux kernels after 2.6.12 do virtual address space randomization, which will prevent the exploit from running successfully after being compiled. To disable this, issue (as root):
sysctl -w kernel.randomize_va_space = 0
Fourth and finally, if you want to trigger a core dump in the vuln program, you have to lift any restrictions on dumping core files. Something like the following should work:
ulimit -c 100000
Note that the shellcode file is superfluous, I only included it as an example and guide.
Next Time
At this point, I’m not sure what I’ll be covering next week. There is a lot I could do – writing shellcode, showcase more advanced shellcode, demonstrate gaining a remote shell (remote exploitation is a whole other beast), secure coding, polymorphic and self-modifying shellcode… there are a lot of topics, and only one lecture left before the end of the series.
Regardless, it will be fun, and we’ll all learn a hell of a lot.
I’ll be at Barcamp Rochester 3 this Saturday in GCCIS, and more likely than not I’ll be talking about anything and everything computer security. If you have any questions anything or find something I’ve said interesting, hit me up! I’m friendly, and always up for talking about computer security :)
This past academic quarter I elected to do an independent study. A lot of hype has been surrounding web development over the past few years, and the python scripting language for even longer than that. Figuring it was time to immerse myself in both subjects and the technologies related to them, the independent study turned into a full four credit project aimed toward creating a web application for administering quizzes. Because I only had ten weeks to learn everything involved with developing a web application on top of the language, I coerced my good friend David Brenner into doing it with me. Development is done, and I now feel like I can talk intelligently about my experiences.
The project was developed using straight python, utilizing the mod python Apache module to serve Python Server Page (psp) files. Python isn’t my favorite language to code with, it is lacking some things that I’ve come to expect from a scripting language, and some things are just silly. Examples of lacking features include the ability to get an iterator for a collection. Iterators that grant references both to the next and previous element of a collection grant superior control and the ability to keep state while iterating. Python only allowing you to move forward through a collection with its “for x in collection:” construct really hurts while parsing large sequences of text, and having to revert to array notation and keep an index is much less human readable than just manipulating an iterator.
Annoyances with the language include python being a scripting language that doesn’t default to printing the string value of non-string objects, and using procedural style method calls intermixed with object-oriented style. For example, to print an object (say an array), you can’t just do print(“Array contents: “ + arrayName). You have to manually return the string value by using print(“Array contents:” + str(arrayName)) in order to avoid an error that print() was expecting an object of type string. I know python’s mantra is “explicit over implicit,” but languages are tools that you learn how to use. As I learn more, I expect to gain proficiency with the tool in order to save me time in the future. Python is easy to learn and easy to use, but I have yet to find any tricks with the language that save me time or make my job easier than it would be with another language. One last thing that I simply do not understand is the necessity to include a reference to “self” in method and constructor definitions. I strongly prefer the method signature to match the required call, python’s decision to branch from that convention is one that I can’t imagine will have a justification strong enough to alter my opinion of the practice.
As it goes with web development, we also used javascript, a MySQL database backed with InnoDB table engines, LDAP for authentication, HTML, and CSS. Development was utterly boring. Being a computer science student, I enjoy working on new things that present challenges and reward creative solutions. The most thought intensive part of this project was the parser run on imported quizzes using a format we decided on – and that was developed in the fourth week. Everything else was the brainless transfer of requirements to code. Some of the people I go to school with are attracted this kind of development, and I think I know why: frontend web dev is easy. Writing the backend logic isn’t bad, but the interface code and associated handlers could be composed by a high school student with some spare time and only rudimentary knowledge. The things learned in computer science definitely aren’t applied in that domain.
Finally, to wrap up loose ends: object relational database design is neat and very handy, javascript is odd at first but easy to pick up, dealing with web requests and forms is tedious, debugging web applications is a *bitch,* and Debian Linux with Apache, Subversion, screen, and vim makes for a great development and hosting environment.
Web development has its place, but it isn’t for me. I’m capable with python, but I’ll stick with ruby. And if you introduce yourself to me, try to be more descriptive than “I’m a web developer” so my experiences don’t tarnish my opinion of you – because I bet you are more skilled at writing code than that title would suggest.
Alrighty, as life presents the opportunities, I’ll be sharing the funnier things caught on camera. Here is one that made do a double take before laughing a little:

Caught it in the RIT parking lot. I’m not going to explain it; LISP junkies, have your moment ;)
GOTO is a statement all programmers know. Most of us are too young to have ever actually used it, but anyone with a formal education has been provided with GOTO as an example of the worst enabler of ’spaghetti code.’ So after accepting that something called GOTO is bad, we return to thinking about what we’ll do after class. But why, WHY is GOTO gone?
The disappearance of GOTO can be attributed to multiple factors, most of them well presented by the famous Edsger Dijkstra back in freaking 1968 in a letter to the editor of “Communications of the ACM.” He made some humorous points, such as “the quality of programmers is a decreasing function of the density of ‘go to’ statements in the programs they produce.” Maybe I’m further gone than most (run while you can!), but it made me chuckle. The main points that he was trying to convey however are less humorous: GOTO makes it harder to ‘prove’ programs[1], removes the ability for a programmer to determine the progress of the program in execution[2], and that GOTO is just too primitive of a statement.
After some jokes among computer scientists (see COME FROM – yes, our sense of humor is in need of calibration), GOTO really did start to disappear. Most major language designs lacked official GOTO reserved words, and others like ADA included it using a syntax unique only to that statement so it may be easily found in programs. This disappearance is only surface deep, however.
It turns out that while an unbounded GOTO may result in obnoxious and nondeterministic code, the ability to jump to a segment of code outside the normal flow of execution is pretty handy. ‘Case’ statements are a popular implementation of a restricted GOTO, with one conditional evaluation resulting in a jump to one of many locations in code. More importantly, error handling would be near impossible to implement without the concepts on which GOTO was founded.
Unless the developer is an idiot, error handling is implemented as a catch in case something unexpected happens (I’ve seen it used as part of normal execution, ick). When something unexpected happens, you can no longer depend on the state of execution within the program. In this case, using a GOTO is the only way to break away from whatever caused the error and make some attempt to either rectify it or exit cleanly. Even the parody COME FROM statement has a hidden usage. In debugging, the concepts in which the COME FROM statement was founded are used to handle breakpoints.
So GOTO isn’t really dead, it is just hidden and stripped of its freedom. And more importantly, it can’t die. We rely on its concepts far too much in structured programming to do away with it. Now that you know, spread the word that GOTOs aren’t inherently bad! They are like kids: they just need boundaries.
[1] Loops and conditional statements, and of course functions, can all be reduced to formal mathematical language. Especially when converted to their recursive forms, loops are incredibly easy to prove as being valid with induction. GOTO statements broke this by making code execution able to change state at any time, greatly reducing the ease in which algorithms could be reduced to and proven with math.
[2] Some people might say “hey, loops are kind of like GOTOs. What is the difference?” Or maybe not, but here is the difference anyway. As pointed out by Dijkstra, loops are able to have some index applied to their current iteration or state in recursion (think for(int i=0; i<end; i++) – i is the index). This allows the programmer to have definite knowledge of the state of execution through using multiple indexes as “coordinates.” With a GOTO, this idea breaks because it is trivial to jump to anywhere in the program at any time, making the current indexes useless.